我开始学习android框架,而最大的问题是活动生命周期中的地狱。因此,当用户旋转屏幕时,我的应用程序就会崩溃。据我了解,除了正常的活动生命周期外,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;
}


这种设计有什么缺点吗?

最佳答案

是的,有一个缺点。当您的应用程序对象需要恢复内存时,它可以并且将被系统销毁,并且该应用程序对象没有可用于保存状态的回调方法。有关更完整的说明,请参见here

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


使用onPause()将长期数据保存到SQLite DB / SharedPreferences / cloud等中。在适当的位置(onCreate()onResume(),...)将其还原。
使用onSaveInstanceState()将临时数据保存到捆绑包中。将其还原到onCreate() / onRestoreInstanceState()中。系统会自动将分发包传递给适当的方法。请注意,不能保证将调用onSaveInstanceState(),因此请勿将其用于关键数据。

关于android - 实现无成员变量 Activity 是否有任何弊端?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19530044/

10-09 07:07