2011-03-03 17 views
1

我试图看清楚它的答案,但无法在任何地方找到它。我在主要活动中运行后台线程来检查某个变量,如果它是真的,它应该显示警告对话框。我也希望这个对话框显示在应用程序的任何重点活动上。我通过将Looper.prepare()和Looper.loop()添加到线程来尝试它,但它不能正常工作,它会影响我用来检查该线程中变量的while()循环。任何人都可以请帮我找出什么是实施这个最好的方法?从应用程序的任何活动中的后台线程的Android显示对话框

谢谢。

回答

0

您可能想尝试创建Runnable的实现并将其传递给Viewpost()方法。

final Runnable r = new Runnable() { 
    public void run() { 
     //code to display dialog 
    } 
} 

final View view = findViewById(R.id.XYZ); 
view.post(r); 

这将在UI线程上运行Runnable

1

如果使用main/ui线程构造后台线程,则可以在构造函数中创建Handler。当你想在主/ UI线程上运行一些代码时,你只需要Handler.post(Runnable r)就可以运行到UI线程。

如果您的后台线程未在ui/main线程中构建,您可以使用BroadcastIntent和BroadcastReceiver模式在后台线程和前台活动之间发送消息。如果您在后台线程的使用寿命期间切换前台活动,此功能特别有用。

+0

嗨,它不会只显示对话框只有当主要活动的重点?..我很抱歉,我是这个新手,所以没有太多深入的知识。 – Parashar 2011-03-04 15:31:30

+0

对于第一种方法,是的。对于第二种方法,您只需在每个活动中实施广播监听器。或者,您可以创建一个抽象类,它扩展了Activity并具有处理广播侦听器的代码,并使用[runOnUiThread](http://developer.android.com/reference/android/app/Activity)将runnable置于ui线程中html的#runOnUiThread(了java.lang.Runnable))。我的猜测是,你会发现这个机制更容易管理,然后重新实现广播监听器。 – 2011-03-04 15:42:53

+0

具有广播监听器的性能明智的最佳实践是什么? – Parashar 2011-03-04 15:52:43

0

好吧,我可以看到两种方法。第一个是肮脏但快速: 您可以扩展TimerTaskHandler类。 YourTimerTask将检查变量并将Message发送到YourHandlerYourHandler应覆盖handleMessage并显示一个对话框。

第二个可能是一个矫枉过正,但仍然。 Android是基于事件的。这意味着系统给你一个创建自己的事件并处理它的机会。因此,您可以启动Service,它将检查您的变量并发送Broadcast(可以是本地)。在你的活动中,你必须创建自己的BroadcastReceiver并注册它。该接收器将处理消息。

相关问题