我正在制作我的第一个Android应用程序,它由editText和Spinner组成。阅读活动周期,我想知道是否有必要在我的情况下使用Bundle机制。在Android中处理运行时更改的简单应用程序 - 我需要使用Bundle吗?
由于小部件自动持久的状态 - 可能我只是呼吁在EditText上的微调器和gettext的()的getSelectedItem()方法onCreate()方法中的活动和传递到我的新重新创建模型对象而不是使用Bundle机制?这种方法的优点和不足之处是什么?
我正在制作我的第一个Android应用程序,它由editText和Spinner组成。阅读活动周期,我想知道是否有必要在我的情况下使用Bundle机制。在Android中处理运行时更改的简单应用程序 - 我需要使用Bundle吗?
由于小部件自动持久的状态 - 可能我只是呼吁在EditText上的微调器和gettext的()的getSelectedItem()方法onCreate()方法中的活动和传递到我的新重新创建模型对象而不是使用Bundle机制?这种方法的优点和不足之处是什么?
小部件的状态不会自动持续存在。当你的活动被破坏时,它会丢失关于状态的所有信息。我建议你使用共享首选项保存你的应用程序状态。这里是一个来自谷歌developers site的例子。它允许你通过存储键值对来保存你的应用程序状态,它应该足够你的应用程序。
当您的活动停止时,将共享首选项中的文本和微调项目位置保存 - onStop()
并恢复onCreate()
中的状态。
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Commit the edits!
editor.commit();
}
}
尽管可以通过onSaveInstanceState(Bundle)
方法保存应用程序状态,通常是更好的方式将做,在onPause()
或onStop()
方法(该数据将被保存肯定)。文件说:
注意,它保存的onPause()的onSaveInstanceState(捆绑),因为后者不是 生命周期回调的一部分,而不是 持久性数据是很重要的,所以不会在任何情况下如被称为其文档中描述的 。
这看起来不太合适--Android文档特别提到了在类似屏幕旋转的事件发生时,在activity上调用onDestroy()方法。从一个简单的测试中,我们可以看到这些小部件在没有编码的情况下保持其状态,这也在文档中提到。你的意思是坚持通过销毁应用程序对象?我不确定我需要这样做。 –
是的,我的意思是如果您需要在应用程序对象被销毁时保存状态。在你的情况下,Android在它自己改变方向时使用bundle机制,所以不需要使用Bundle来保持状态。或者,也许我错了,重新创建模型对象意味着什么? –
呃现在我很困惑,文档说使用onSaveInstanceState(Bundle)方法来保存活动的瞬态(UI的状态)。这让我回到了我原来的问题 - 为什么我不能在onCreate()方法中读取小部件的状态?我想我应该尝试一下,看看会发生什么。 –