Android强引用

Android强引用,android,object,Android,Object,我有一个SearchCritiera对象,我将其设为单例,并将此变量声明为静态, 现在的问题是,如果我让我的应用程序保持打开状态几个小时,静态对象被安卓操作系统删除,我如何确保静态对象不被操作系统删除 就像我知道有几个关键字一样 Weekreference和softreference是否有任何strongreference关键字可以告诉Android操作系统不要删除引用???遗憾的是,您不能强制Android将应用程序保留在内存中。如果操作系统认为前台应用程序或服务需要更多内存,它保留终止一项或

我有一个SearchCritiera对象,我将其设为单例,并将此变量声明为静态, 现在的问题是,如果我让我的应用程序保持打开状态几个小时,静态对象被安卓操作系统删除,我如何确保静态对象不被操作系统删除

就像我知道有几个关键字一样


Weekreference和softreference是否有任何strongreference关键字可以告诉Android操作系统不要删除引用???

遗憾的是,您不能强制Android将应用程序保留在内存中。如果操作系统认为前台应用程序或服务需要更多内存,它保留终止一项或所有活动的权利

我假设发生的是,当你调用静态对象时,它正在丢失并重新创建,这意味着它已经失去了状态。这就是说,如果你在前台活动中有一个对对象的引用,我有点惊讶它会丢失

解决这个问题的最佳方法是挂接并保存singleton对象的状态,然后在适当的时候恢复它


不幸的是,Androd中没有应用程序范围的生命周期事件。看看如何保存暂时的应用程序状态。

如果我没有记错,当应用程序长时间处于打开状态时,安卓操作系统会释放数据,当停止活动时,它会调用“onSaveInstanceState”,我什么时候可以将searchritiera存储到这个方法中,当“onRestoreInstanceState”时,它会返回吗有人打电话吗

private static SearchCriteria searchCriteria;


@Override 
    public void onSaveInstanceState(Bundle outState) 
    {
        outState.putSerializable(WLConstants.SEARCH_CRITERIA, searchCriteria);
        super.onSaveInstanceState(outState); 
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if(savedInstanceState != null){
            searchCriteria = (SearchCriteria)
            savedInstanceState.getSerializable(WLConstants.SEARCH_CRITERIA);
        }
        super.onRestoreInstanceState(savedInstanceState);
    }

不要使用静态引用,即使您的应用程序仍处于前台,这些对象也可能会被垃圾收集器破坏(我已经看到过几次这种情况)

您可以通过将它们存储在您的唯一实例中来避免这种情况。该对象保证与您的应用程序寿命一样长