Android强引用
我有一个SearchCritiera对象,我将其设为单例,并将此变量声明为静态, 现在的问题是,如果我让我的应用程序保持打开状态几个小时,静态对象被安卓操作系统删除,我如何确保静态对象不被操作系统删除 就像我知道有几个关键字一样Android强引用,android,object,Android,Object,我有一个SearchCritiera对象,我将其设为单例,并将此变量声明为静态, 现在的问题是,如果我让我的应用程序保持打开状态几个小时,静态对象被安卓操作系统删除,我如何确保静态对象不被操作系统删除 就像我知道有几个关键字一样 Weekreference和softreference是否有任何strongreference关键字可以告诉Android操作系统不要删除引用???遗憾的是,您不能强制Android将应用程序保留在内存中。如果操作系统认为前台应用程序或服务需要更多内存,它保留终止一项或
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);
}
不要使用静态引用,即使您的应用程序仍处于前台,这些对象也可能会被垃圾收集器破坏(我已经看到过几次这种情况) 您可以通过将它们存储在您的唯一实例中来避免这种情况。该对象保证与您的应用程序寿命一样长