哪个生命周期事件最适合注册/取消注册侦听器?

时间:2011-06-29 18:59:56

标签: android android-activity listener lifecycle

我有一个将活动作为监听器的经理类。我使用管理器进行线程调用,工作等,然后在完成任务,需要更改等时回调到监听器(活动)。

我希望在不再可见的情况下注册和取消注册活动作为监听器。这样可以防止发生不必要的更改(例如,当活动不再可见时出现的对话框。)

我的问题是,哪些生命周期事件最适合进行此注册。我开始使用onPause()和onResume(),除非我有一个在onActivityResult()中执行操作的活动,否则它运行良好。由于onActivityResult()在onResume()之前被调用,我的经理并不总是及时注册。

我是否需要在onResume()和onActivityResult()中注册,还是有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:2)

另一种方法可能是推迟onActivityResult()中当前完成的处理,直到在onResume()中注册侦听器为止。

这样做的可能方法包括发布到消息队列,例如使用Handler,设置一个由onResume调用的Runnable对象,或者只是存储onActivityResult()接收的结果数据。

这也可以确保在调用侦听器方法时活动确实已经到了前台。

答案 1 :(得分:1)

onResume()和onPause()是最好的。根据文档,onDestroy()不能保证被调用,虽然这是很多人的最爱,所以坚持暂停和恢复。

答案 2 :(得分:0)

您可以在Manager类中拥有当前Activity的句柄。在onCreate()上注册其状态,并在onCreate()上通过其他活动或当前活动的onBackPressed()取消注册。

在相关的说明中,我建议使用MVC(或类似)架构,其中控制器可以了解视图的状态(控制器可以跟踪每个活动的onCreate()onBackPressed()。 / p>