【发布时间】:2012-11-24 16:16:42
【问题描述】:
您好,我想让Toast 对我可用,无论何时我都可以在我的应用程序中使用任何线程。所以为此我扩展了Activity 类:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
public class MyActivity extends Activity{
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
mHandler = new Handler();
super.onCreate(savedInstanceState);
}
private class ToastRunnable implements Runnable {
String mText;
public ToastRunnable(String text) {
mText = text;
}
public void run(){
Toast.makeText(getApplicationContext(), mText, Toast.LENGTH_SHORT).show();
}
}
public void doToast(String msg) {
mHandler.post(new ToastRunnable(msg));
}
}
所以我的应用程序中的所有 Activity 类现在很简单
public class AppMain extends MyActivity {
//blah
}
我期望能够(在工作线程中)做的是:
try{
MyActivity me = (MyActivity) Looper.getMainLooper().getThread();
me.doToast("Hello World");
}
catch (Exception ex){
Log.e("oh dear", ex.getMessage());
}
只要Activity 是“MyActivity”,它应该可以工作 - 但问题是 ---> Looper.getMainLooper().getThread(); 没有将MyActivity 返回给我,这让我哭了 -我究竟做错了什么?
:编辑:
一些背景来解释“为什么”我坚持这种类型的实现。
我需要能够向用户确认“HTTP POST”事件已成功。现在。如果用户在 UI 表单上单击“确定”,那么它当时可能或可能没有互联网。如果它有互联网 - 一切都很好 - 它通过 HTTP POST 发布表单一切都很好.. 但如果大多数情况下 没有互联网(99.999% 的 Android 应用程序在这方面蹩脚/可怜/哀嚎,并且基本上不向用户提供 plan "b" 假设在任何时候都有互联网 - 当它不存在时)
我的应用不会“跛脚(我这么称呼它)”——它确实有一个计划“b”,而是“排队”发布事件并每 x 分钟重试一次。现在这个是后台的静默线程。我在整个应用程序中都有大量的用户交互我不知道用户将“在哪里”,但最终当队列/重试/队列/重试的 HTTP POST 返回“!成功! " 我想 Toast 将其作为给用户的消息(例如:“您的表单已发送”)
【问题讨论】:
标签: android android-activity toast ui-thread