首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android强引用

Android强引用
EN

Stack Overflow用户
提问于 2010-01-15 19:13:14
回答 3查看 1.2K关注 0票数 6

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

就像我知道有几个关键字

Weekreference和softreference有没有什么强引用关键字可以告诉Android操作系统不要删除引用??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-15 23:16:12

不要使用静态引用,即使你的应用程序仍然在前台,这些对象也可能会被垃圾回收器销毁(我已经看到这种情况发生过几次了)。

您可以通过将它们存储在唯一的Application实例中来简单地避免这种情况。这个对象保证和你的应用程序一样长寿。

票数 3
EN

Stack Overflow用户

发布于 2010-01-15 19:48:08

可悲的是,你不能强迫Android将你的应用程序保存在内存中。如果操作系统觉得前台应用程序或服务需要更多内存,它保留终止您的一个或所有活动的权利。

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

你能做的最好的工作就是挂接到the lifecycle events并保存你的单例对象的状态,然后在适当的时候恢复它。

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

票数 1
EN

Stack Overflow用户

发布于 2010-01-15 21:21:19

如果我没有记错,当应用程序长时间保持打开的时候,数据是由安卓操作系统释放的,当停止活动时,它会调用"onSaveInstanceState“,什么时候我可以将搜索存储到这个方法中,当"onRestoreInstanceState”被调用时,它会检索回来吗?

代码语言:javascript
运行
复制
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);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2071005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档