0

我正在刺探一个具有后台服务的大型程序,而且我正在使用基本的Handler对象实现一个(相当糟糕的)消息处理过程。该应用程序有一个主菜单,其中包含启动6个不同活动的按钮。消息处理,与工作线程的意外行为

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

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

回答

0

使用sendBroadcast(),与Activity通过registerReceiver()onResume()注册的广播一BroadcastReceiveronPause()中注销。然后,它只会处理事件,如果它在前台。

+0

这需要我完全重写我的消息处理,但这是预期的。 – moonlightcheese 2011-06-07 21:49:34

0

onPause()中放置一些标志,以启动线程以指示它不再处于前景状态。在onStart()反转旗帜。

当它是显示对话框的时候,检查这个标志并且只在活动正在运行时显示对话框。