我有一个将活动作为监听器的经理类。我使用管理器进行线程调用,工作等,然后在完成任务,需要更改等时回调到监听器(活动)。
我希望在不再可见的情况下注册和取消注册活动作为监听器。这样可以防止发生不必要的更改(例如,当活动不再可见时出现的对话框。)
我的问题是,哪些生命周期事件最适合进行此注册。我开始使用onPause()和onResume(),除非我有一个在onActivityResult()中执行操作的活动,否则它运行良好。由于onActivityResult()在onResume()之前被调用,我的经理并不总是及时注册。
我是否需要在onResume()和onActivityResult()中注册,还是有更好的方法来解决这个问题?
答案 0 :(得分:2)
另一种方法可能是推迟onActivityResult()中当前完成的处理,直到在onResume()中注册侦听器为止。
这样做的可能方法包括发布到消息队列,例如使用Handler,设置一个由onResume调用的Runnable对象,或者只是存储onActivityResult()接收的结果数据。
这也可以确保在调用侦听器方法时活动确实已经到了前台。
答案 1 :(得分:1)
onResume()和onPause()是最好的。根据文档,onDestroy()不能保证被调用,虽然这是很多人的最爱,所以坚持暂停和恢复。
答案 2 :(得分:0)
您可以在Manager类中拥有当前Activity的句柄。在onCreate()
上注册其状态,并在onCreate()
上通过其他活动或当前活动的onBackPressed()
取消注册。
在相关的说明中,我建议使用MVC(或类似)架构,其中控制器可以了解视图的状态(控制器可以跟踪每个活动的onCreate()
和onBackPressed()
。 / p>