这不是我如何避免我的活动重新启动和重新设置配置更改等问题的问题 这是一个问题,为什么尽管我付出了所有努力,我的活动仍然重新启动。可能的原因是什么?
这是我的场景。
我的应用程序是一个带有标签的文本编辑应用程序,因此我实现了一个自定义 TabHost 和一个自定义 TabWidget。该应用程序具有 MainActivity 和单个片段 MainFragment。
为了确保实例保留在我的 中MainFragment
,我有这些:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
为了确保MainActivity
保留实例,我有这个:
/**
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
frame.setId(android.R.id.content);
setContentView(frame, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
actionBar = getSupportActionBar();
if ((MyTextEditor.isSmallScreenSize(getResources()) || MyTextEditor.isNormalScreenSize(getResources()))
&& getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ) {
actionBar.setDisplayShowTitleEnabled(false);
}
if (savedInstanceState != null) {
editorFrag = (MyTedFragment) getSupportFragmentManager().getFragment(
savedInstanceState, "editor");
}
if (editorFrag == null) {
editorFrag = new MyTedFragment();
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, editorFrag).commit();
}
....
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
getSupportFragmentManager().putFragment(outState, "editor", editorFrag);
}
以下是我的AndroidManifest.xml
<application
android:name="com.myapp.MyApp"
android:debuggable="true"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MyAppTheme" >
<!-- Ted main activity ... ie a text field :)
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustResize"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale|screenSize|smallestScreenSize">
-->
<activity
android:name="com.myapp.texteditor.MainActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale|screenSize|smallestScreenSize"
android:launchMode="singleTask" android:windowSoftInputMode="adjustResize">
</activity>
....
</application>
现在的问题:
案例 1:Android 版本:三星设备上的 2.3.6 Gingerbread
如果我将我的活动推到后台并在不到 3 分钟的时间内重新启动我的应用程序,则主活动实例恢复得很好。如果我选择在一段时间后重新启动我的应用程序,比如 10 分钟左右,应用程序会重新启动,这对我的应用程序不利,因为如果用户有任何未保存的更改,它们就会丢失。
案例 2:Android 版本:4.3,在模拟器上运行
我选择在重新启动应用程序之前等待多长时间,实例总是会恢复。看起来一切正常。
这可能是什么原因?这是否与 Gingerbread 的活动生命周期或活动管理器相关的错误?