我开始学习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/