我有SearchCritiera对象,我让它成为单例,并声明这个变量为静态,现在的问题是,如果我让我的应用程序保持打开几个小时,静态对象被安卓操作系统删除,我如何确保静态对象不会被操作系统删除。
就像我知道有几个关键字
Weekreference和softreference有没有什么强引用关键字可以告诉Android操作系统不要删除引用??
发布于 2010-01-15 23:16:12
不要使用静态引用,即使你的应用程序仍然在前台,这些对象也可能会被垃圾回收器销毁(我已经看到这种情况发生过几次了)。
您可以通过将它们存储在唯一的Application实例中来简单地避免这种情况。这个对象保证和你的应用程序一样长寿。
发布于 2010-01-15 19:48:08
可悲的是,你不能强迫Android将你的应用程序保存在内存中。如果操作系统觉得前台应用程序或服务需要更多内存,它保留终止您的一个或所有活动的权利。
我假设发生的情况是你的静态对象正在丢失,并在你调用它时重新创建,这意味着它已经失去了状态。也就是说,如果你在前台活动中引用了对象,我会有点惊讶它正在迷失。
你能做的最好的工作就是挂接到the lifecycle events并保存你的单例对象的状态,然后在适当的时候恢复它。
不幸的是,Androd中没有应用程序范围的生命周期事件。看看this question,了解如何保存应用程序的瞬态状态。
发布于 2010-01-15 21:21:19
如果我没有记错,当应用程序长时间保持打开的时候,数据是由安卓操作系统释放的,当停止活动时,它会调用"onSaveInstanceState“,什么时候我可以将搜索存储到这个方法中,当"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);
}https://stackoverflow.com/questions/2071005
复制相似问题