gpt4 book ai didi

android - 实现成员变量自由 Activity 有什么缺点吗?

转载 作者:行者123 更新时间:2023-11-29 21:30:59 25 4
gpt4 key购买 nike

我开始学习 android 框架,我最大的问题是围绕 Activity 生命周期的 hell 。因此,当用户旋转屏幕时,我的应用程序就会崩溃。据我了解,除了正常的 Activity 生命周期之外,Android 还为我破解了一个强制实例删除和部分恢复服务,这不是一个错误,而是一个功能。

所以我只想让我的成员变量保持安全,所以我想开始将它存储在 Application 类中。

所以我想按照以下方式重构我的程序:

我创建了一个自己的应用程序

public class MainApp extends Application {
LoginActivityData loginActivityData; // create data "segment" for every activity
FirstActivityData firstActivityData;
...

public static MainApp getInstance(final Context context) {
if (context == null) return null;
final Context app = context.getApplicationContext();
return app instanceof MainApp ? (MainApp) app : null;
}

}

在 Activity 和 fragment 中,我不再使用成员变量,MainApp 类中的成员变量除外。

public class LoginActivity extends Activity {
LoginActivityData loginActivityData;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loginActivityData = MainApp.getInstance(this).loginActivityData;
}

这种设计有什么缺点吗?

最佳答案

是的,有一个缺点。当需要回收内存时,您的应用程序对象可以并且将会被系统销毁,并且应用程序对象没有可用于保存状态的回调方法。参见 here以获得更全面的解释。

有很多方法可以持久化数据/状态,但如果您使用以下方法,通常不会出错:

  • 使用 onPause() 将长期数据保存到 SQLite DB/SharedPreferences/cloud 等。在适当的地方恢复它(onCreate()onResume (), ...).
  • 使用 onSaveInstanceState() 将临时数据保存到 Bundle。在 onCreate()/onRestoreInstanceState() 中恢复。束由系统自动传递给适当的方法。请注意,无法保证一定会调用 onSaveInstanceState(),因此不要将其用于关键数据。

关于android - 实现成员变量自由 Activity 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19530044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com