Android在任何应用程序活动中显示来自后台线程的对话框

时间:2011-03-03 21:32:16

标签: android multithreading dialog background

我试着为它寻找明确的答案,但无法在任何地方找到它。我在主活动中运行后台线程来检查某个变量,如果它是真的,它应该显示警告对话框。我还希望此对话框显示应用程序的任何重点活动。我通过向线程添加Looper.prepare()和Looper.loop()来尝试它,但它不能正常工作,它影响我用来检查该线程中的变量的while()循环。任何人都可以帮助我找出实现这个的最佳方法是什么?

感谢。

3 个答案:

答案 0 :(得分:1)

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

如果你的后台线程没有在ui / main线程上构建,你可以使用BroadcastIntent和BroadcastReceiver模式在后台线程和前台活动之间发送消息。如果要在后台线程的使用寿命期间切换前台活动,这将非常有用。

答案 1 :(得分:0)

您可能想尝试创建Runnable的实现并将其传递给View的{​​{1}}方法。

post()

这将在UI线程上运行final Runnable r = new Runnable() { public void run() { //code to display dialog } } final View view = findViewById(R.id.XYZ); view.post(r);

答案 2 :(得分:0)

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

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