只需按一下即可清除一堆活动
Posted
技术标签:
【中文标题】只需按一下即可清除一堆活动【英文标题】:clearing stack of activities with just one press 【发布时间】:2012-01-06 19:57:06 【问题描述】:我有一个正在启动的 Activity
A1,它有一个启动按钮,用于启动 Service
S1:
startButton.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
Log.i(TAG1, "Starting Update Service");
startService(serviceIntentS1);
);
S1 根据某些条件启动 Activity
A2:
if (giveninteger>=2)
Intent intentA2= new Intent(this, A2.class);
// following line to avoid exception
intentA2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //to avoid exception
startActivity(intentA2);
A2 订阅 S1,用户可以通过 S1 从 A2 看到定期更新的数据。 A2 有以下代码来停止 S1 服务:
public void onBackPressed()
try
Log.i(TAG2, "Killing Update Service");
stopService(serviceIntentS1);
catch (NullPointerException e)
Log.i(TAG3, "Service was not running " + e.toString());
finish();
System.exit(0);
return;
我的问题是,如果更新从 A2 运行 10 次,用户必须按 10 次返回按钮才能退出 Activity
A2。也就是说,A2 的实例在Activity
堆栈中累积。我在从 S1 启动 A2 期间尝试了所有标志,但没有成功。我想退出Activity
A2 只需按一下即可,无论更新运行多少次。
任何建议都会有所帮助。
【问题讨论】:
“更新”是什么意思?您是在 A2 中使用 BroadcastReceiver 从 S1 捕获 Intent 还是什么? 是的,我在 A2 中使用 BroadcastReceiver 并获取网络服务 那么您是如何在活动堆栈中获得这些多个 A2 实例的?哪个组件启动了这一切?如果是 S1 服务,那么为什么每次都使用 startActivity() 而不是 sendBroadcast()?如果是其他任何一个,那么是哪个? 感谢 praetorian 的 cmets。该应用程序具有复杂的工作流程,我需要从服务启动活动,而不是使用 sendBroadcast()。请看下面我的cmets。我终于解决了这个问题。 【参考方案1】:您需要的是 A2 的 SingleInstance,这样无论 A2 启动多少次,都只剩下一个实例,您只需按一次后退按钮。 在 androidManifest 文件中定义该属性。
<activity android:launchMode"singleInstance"/>
【讨论】:
感谢 Rajdeep...问题是,如果我使用它,活动 A2 的数据不会从服务 S1 更新。 我解决了这个问题。感谢 Rajdeep 将我引导至清单文件。我必须对清单文件中的活动 A2 进行以下设置: android:clearTaskOnLaunch="true" android:stateNotNeeded="true" android:noHistory="true"以上是关于只需按一下即可清除一堆活动的主要内容,如果未能解决你的问题,请参考以下文章