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

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

是否可以确保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);    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5132236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存