消息处理,工作线程的意外行为

时间:2011-06-06 21:43:47

标签: android multithreading message-queue handler android-service

我正在使用后台服务攻击大型程序,并且正在使用基本的Handler对象实现一个(相当糟糕的)消息处理过程。该应用程序有一个主菜单,按钮可以启动6个不同的活动。

问题是这样的:如果我启动一个工作线程,它启动对数据库的查询并检索一些数据,并关闭启动上述工作线程的Activity,则Activity中的Handler仍会尝试运行并显示对话框,即使创建它的Activity现在已完成(或未处于焦点)。如何在提交任何(UI)更改之前判断当前活动是否处于焦点?

我最后通过简单地将'showDialog()'调用放在try语句中来解决问题,但我想要一个更复杂的解决方案,因为这似乎是错误的做事方式。

2 个答案:

答案 0 :(得分:0)

使用sendBroadcast()Activity通过BroadcastReceiver中的registerReceiver()注册onResume()广播,并在onPause()取消注册。然后,它只会处理事件,如果它在前台。

答案 1 :(得分:0)

onPause()活动方法中放置一些标志,该方法启动线程以指示它不再是前景。在onStart()反转旗帜。

当需要显示对话框时,请检查此标志,并仅在活动正在运行时显示对话框。