栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以确保Activity类中的静态字段不会超过创建/销毁周期?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以确保Activity类中的静态字段不会超过创建/销毁周期?

此答案的第一部分确实很旧-参见以下 正确 方法

您可以使用Application对象存储应用程序持久性对象。
此Android常见问题解答也讨论了此问题。

像这样:

public class MyApplication extends Application{    private String thing = null;    public String getThing(){        return thing;    }    public void setThing( String thing ){        this.thing = thing;    }}public class MyActivity extends Activity {    private MyApplication app;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        app = ((MyApplication)getApplication());        String thing = app.getThing();    }}

正确的 方法

首次编写此答案时,活动生命周期的文档不如现在。阅读“活动”文档中的“
保存活动状态”部分可帮助我们了解Android如何希望我们保存状态。从本质上讲,活动在两种情况下开始:(1)作为新活动,(2)由于配置更改或由于内存压力而被销毁后重新创建活动。当您的活动由于是新活动而开始时,则saveInstanceState为null。否则不为null。如果为null,则您的活动应从头开始初始化。片段与“活动”非常相似,我在AnDevCon-14滑座上详细介绍了这个概念。您还可以查看示例代码
有关我的AnDevCon-14演示的更多信息。

重做我以前的示例将类似于下面的代码。我确实做了一些语义上的更改-
在第二个版本中,我假设字符串

thing
是特定于特定android任务中的活动的,在前面的示例中它是不明确的。如果您确实想为多个android任务保留相同的数据,那么最好还是使用Application对象或另一个单例。

public class MyActivity extends Activity {    private static final String THING = "THING";    private String thing;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (savedInstanceState==null) { // First time here (since we last backed out at least) thing = initializeThing(); // somehow we init it        } else { // Rehydrate this new instance of the Activity thing = savedInstanceState.getString(THING);        }        String thing = app.getThing();    }    protected void onSaveInstanceState(Bundle outState) {        outState.putString(THING, thing);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号