【发布时间】:2012-12-12 19:29:38
【问题描述】:
我在 Activity 导航和后台堆栈方面遇到问题,希望您能帮我解决。
问题
Root Activity >>> SecondActivity >> HomeButton
然后这会将我带到主页并从那里选择...
Gmail >> 消息 >> 在我的应用程序中打开附件 >> ImportActivity >> RootActivity
结果是启动了一个新任务,并使用了我的应用程序的另一个实例。这是不可接受的,因为我不想运行两个单独的任务,我只想要一个。
期望的结果
我想要发生的是当用户打开附件并且 ImportActivity 完成它的操作(它已将 android:noHistory 设置为 true)并调用 startActivity(intent)、RootActivity 时启动,但在原始任务中只保留一个实例,其余的活动(在本例中为SecondActivity)被删除。
我想要这样做的原因是,如果用户在导入文件后导航出我的应用程序,然后触摸应用程序图标,它会加载第一个任务及其后堆栈,并且我有两个任务正在运行,用户可以在其中我的应用程序的不同部分。
我的尝试
我玩过启动模式,但它们都没有真正提供我需要的功能。
我尝试过的启动模式..
android:launchMode="singleTask" - 这只是在每次启动根活动时再次启动它。即使用户在我的应用程序中按下了主页按钮并触摸了应用程序图标,后台堆栈也会被破坏。
android:launchMode="singleInstance = 不允许任何其他活动在任务中运行。
另外,在调用意图启动RootActivity时,我使用了以下方法无济于事。
Intent i = new Intent(ImportActivity.this,TrackingActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
有没有可能做我想做的事?
提前致谢
【问题讨论】:
-
您是否尝试过使用单顶标志?
-
在单任务模式下的 RootActivity 怎么样,你可以在 onPause() 中保存它的状态。当用户返回 RootActivity 时,会创建一个读取保存状态的新实例。
-
在启动 TrackingActivity 时使用
Intent.FLAG_ACTIVITY_CLEAR_TASK -
你试过我关于
taskAffinity的建议了吗?
标签: android android-intent android-activity android-lifecycle