【问题标题】:Is there any drawback to implementing member variable free activities?实施成员变量免费活动有什么缺点吗?
【发布时间】:2013-10-22 23:21:12
【问题描述】:

我开始学习 android 框架,我最大的问题是 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;
   }

}

在活动和片段中,我停止使用除 MainApp 类中的成员变量之外的成员变量。

public class LoginActivity extends Activity {
   LoginActivityData loginActivityData;

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

这种设计有什么缺点吗?

【问题讨论】:

    标签: android design-patterns android-activity android-lifecycle


    【解决方案1】:

    是的,有一个缺点。您的应用程序对象可以并且将在需要恢复内存时被系统销毁,并且应用程序对象没有可用于保存状态的回调方法。请参阅here 以获得更完整的解释。

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 2018-10-21
      • 1970-01-01
      • 2021-03-08
      • 2012-04-11
      • 1970-01-01
      • 2016-12-19
      • 2011-04-26
      • 2011-02-28
      相关资源
      最近更新 更多