我正在使用后台服务攻击大型程序,并且正在使用基本的Handler对象实现一个(相当糟糕的)消息处理过程。该应用程序有一个主菜单,按钮可以启动6个不同的活动。
问题是这样的:如果我启动一个工作线程,它启动对数据库的查询并检索一些数据,并关闭启动上述工作线程的Activity,则Activity中的Handler仍会尝试运行并显示对话框,即使创建它的Activity现在已完成(或未处于焦点)。如何在提交任何(UI)更改之前判断当前活动是否处于焦点?
我最后通过简单地将'showDialog()'调用放在try语句中来解决问题,但我想要一个更复杂的解决方案,因为这似乎是错误的做事方式。
答案 0 :(得分:0)
使用sendBroadcast()
,Activity
通过BroadcastReceiver
中的registerReceiver()
注册onResume()
广播,并在onPause()
取消注册。然后,它只会处理事件,如果它在前台。
答案 1 :(得分:0)
在onPause()
活动方法中放置一些标志,该方法启动线程以指示它不再是前景。在onStart()
反转旗帜。
当需要显示对话框时,请检查此标志,并仅在活动正在运行时显示对话框。