在我的申请中,我有三项活动:
<activity
android:name="com.example.myapp.SplashScreenActivity"
android:exported="true"
android:launchMode="singleInstance"
android:noHistory="true"
android:screenOrientation="sensorLandscape" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.myapp.MainActivity"
android:exported="false"
android:launchMode="singleInstance"
android:screenOrientation="sensorLandscape" >
</activity>
<activity
android:name="com.example.myapp.ListActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="sensorLandscape" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myapp.MainActivity" />
</activity>
第一个是LAUNCHER
,SplashScreenActivity
,它是一个快速消失的启动画面,并且在最近的活动中没有显示,它启动MainActivity
。在MainActivity
用户可以选择一个类别,ListActivity
显示属于给定类别的项目。这是通过以下代码完成的:
Intent i = new Intent(getActivity(),ListActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
i.putExtra("category",mCategory);
startActivity(i);
在ListActivity
onResume
方法检查“category”extra并相应地显示数据。由于Activity
launchMode是singleTop,因此我还重写了onNewIntent
方法以设置Intent
的新Activity
。
如果应用没有进入后台,这种情况正常:在这种情况下,当我重新启动MainActivity
并选择一个类别时,ListActivity
会恢复显示属于的Activity
旧数据以前选择的类别。
我应该如何修复flags / launchMode,使我的应用无法在加载旧数据的情况下恢复ListActivity
?
答案 0 :(得分:0)
您不应使用特殊启动模式。这些很少需要,仅在非常具体的情况下才需要。从清单中删除所有launchMode
说明符。从ListActivity
启动MainActivity
时,您也不需要使用这些标记:
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
您使用singleInstance
启动模式会导致所有这些问题。
答案 1 :(得分:0)
假设您放弃了所有的launchModes和Flags,那么活动生命周期会为您提供实现应用程序所需的所有信息,如您所描述的那样 - 也许有些东西没有添加?
一旦应用程序进入后台,ListActivity将被允许保存其状态,即使系统将终止你的进程(内存不足等),然后仍然 - 启动你的应用程序将首先带回ListActivity与先前保存的实例州。所以你不会有你描述的行为:when I restart MainActivity and select a category, ListActivity resumes the old Activity showing data belonging to the previously chosen category.
但是,如果您需要保持当前的设计,那么您应该以某种方式告知ListActivity新的数据更改,问题是在您描述的情况下是否正在调用ListActivity.onNewIntent?您是否尝试添加Intent.FLAG_ACTIVITY_SINGLE_TOP
:根据此博客条目:http://www.acnenomor.com/1094151p2/bug-onnewintent-not-called-for-singletop-activity-with-intentflagactivitynewtask?