2012-09-29 47 views
2

我正在开发android使用android批注。我有一个单身可观察对象,我想以观察者的身份添加活动。如下所示:删除观察员上摧毁()android

@EActivity(R.layout.myActivity) 
public class MyActivity extends SherlockActivity implements Observer { 

    @Bean //has singleton scope 
    protected Observerable o; 

    @Override 
    public void onCreate() { 
     o.registerObserver(this); 
    } 

    @Override 
    public void onDestroy() { 
     o.unregisterObserver(this); 
    } 

    //more code 

我的问题在于on destroy方法。会不会出现在那里的Android停止或暂停状态期间杀死活性而不调用onDestroy()的情况吗?如果是这种情况,我的Observerable可能会保留对系统不再使用的活动的实时参考,这是不好的。或者情况并非如此?如果这是我的推测,那就是在我的注册观察员名单中保留对我所有活动的弱引用,以便他们可以自动取消注册。这是一个很好的解决方案还是不需要?

+0

您正在使用Observer的目的? – Dharmendra

+0

我正在通过ormlite修改域对象。所有使这些对象响应通过观察者通知创建/读取/更新修改的活动。因此,例如,我的可观察性允许我通过OrmLite存储库将新的域对象添加到数据库,并且通过观察者实现将查看所有域列表的活动通知给新域。 – mogronalol

回答

2

操作系统可以杀死你的过程,而不调用的onDestroy,但除此之外,你可以依靠的onDestroy被调用。因此,如果您的Observable与该活动处于相同的过程中,那么您很好。

+0

所以它会终止整个应用程序/进程没有调用onDestroy(),但终止个别活动时,它总是会调用onDestroy ((?? – mogronalol

+1

)讨论一个活动被“终止”是没有意义的。当操作系统想要重新使用Activity所拥有的一些资源时,它会调用onDestroy让你的程序知道那个活动不再活动本身只是一个类的一个实例,所以它一直存在,直到它被垃圾收集为止,但是大多数方法在被调用时会抛出异常,这与一个进程相反,这个进程真的可以被操作系统任意终止。 –

1

根据活动的上Android documentation生命周期,这种情况下可能发生如果其他应用程序必须启动,系统没有足够的内存。

编辑:嗯,看来系统仍然调用在这种情况下此方法。我真的不知道有关工作流了...

+0

是的,我对它是否被调用类似的困惑,看起来像弱引用可以解决我的问题,然后 – mogronalol