Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除destroy()android上的观察者_Android_Observer Pattern_Android Annotations - Fatal编程技术网

删除destroy()android上的观察者

删除destroy()android上的观察者,android,observer-pattern,android-annotations,Android,Observer Pattern,Android Annotations,我正在使用android注释为android开发。我有一个单态可观察对象,我想为它添加活动作为观察者。大致如下: @EActivity(R.layout.myActivity) public class MyActivity extends SherlockActivity implements Observer { @Bean //has singleton scope protected Observerable o; @Override public

我正在使用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

我的问题是关于销毁方法。是否会出现android在停止或暂停状态下停止活动而不调用
onDestroy()
?如果是这种情况,我的
observer
可能会保留对系统不再使用的活动的实时引用,这是不好的。还是不是这样?如果是这样的话,我的假设是在我的注册观察员名单中保留对我所有活动的弱引用,这样他们就可以自动注销。这是一个好的解决方案还是不需要的?

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


编辑:在这种情况下,系统似乎仍会调用此方法。我真的不太确定工作流…

操作系统可以在不调用onDestroy的情况下终止您的进程,但其他情况下,您可以依赖调用onDestroy。因此,只要您的Observable与活动处于相同的过程中,您就可以了。

您使用Observable的目的是什么?我正在通过ormlite修改域对象。呈现这些对象的所有活动都通过观察者通知响应创建/读取/更新修改。例如,my observerable允许我通过OrmLite存储库将新域对象添加到数据库中,查看所有域列表的活动通过其observer实现通知新域。是的,对于是否调用它,我也有类似的困惑,看起来弱引用可以解决我的问题,因此它将在不调用onDestroy()的情况下终止整个应用程序/进程,但在终止单个活动时,它将始终调用onDestroy((?谈论活动被“终止”没有多大意义)。当操作系统想要重新使用某个活动所持有的某些资源时,它会调用onDestroy,让您的程序知道该活动不再有效。该活动本身只是一个类的实例,因此它会一直保留到垃圾回收为止,但大多数方法在调用时都会抛出异常。这与进程不同,进程实际上可以由操作系统随意终止。