如何避免同一个Activity的多个实例?

在我的PoC中,我有一些活动, HomeActivityCreateActivitySearchActivityResultsActivityResultDetailsActivityUpdateActivity

我有两个主要的导航path: 创buildsearch

导航为创buildpath如下所示: HomeActivity – > CreateActivity – (在完成) – > HomeActivity

search导航如下: HomeActivity – > SearchActivity – > ResultsActivityListActivity ) – > ResultDetailsActivity – > UpdateActivity – (完整) – > ResultDetailsActivity (与更新的数据)。

目前,导航到新的Activity是通过startActivity(intent)方法。 但是,这会导致打开每个Activity多个实例。

我对Android比较陌生。 有人可以请build议我怎么可以避免这个?

设置以下标志可以帮助您解决您的问题:

  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

在你的android清单中,添加到你的<activity>标签android:launchMode="singleTask"

有关完整列表,请查看活动文档

在你的清单中:

  <activity android:name=".YourActivity" android:launchMode="singleTask" android:label="@string/app_name" /> 

注意:不要使用单身人士。

startActivity时使用Intent标志:

 Intent intent = new Intent(this, MyActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); 

旗子有很多种。

这将是有益的: Android单身人士活动

pipe理活动的最佳forms是使用

startActivityForRestult(意图,ID)

使用此方法调用活动,您的HomeActivity可以pipe理覆盖方法中其他活动的结果

  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); } 

您可以发送不同活动的已知结果并进行pipe理。 例如:
(Allways with startActivityForResult)

HomeActivity – > SearchActivity – > ResultsActivity(ListActivity) – > ResultDetailsActivity – > UpdateActivity – (完整) – > ResultDetailsActivity(与更新的数据)。 按回车并发送SEARCH_FINISHED – > UpdateActivity抓住这个并在onActivityResult方法发送相同的结果,完成() – >与searchActivity相同 – >首页

这也可以帮助你:

Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

很less有东西要添加到JoonSung发布的答案,改变addFlag方法,这将抛出“无法解决错误”

更改: intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

到: intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

代码应该是:

 Intent intent = new Intent(this, MyActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); 

为了防止同一个Activity的多个实例改变标志

来自: intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

到: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

代码应该是:

 Intent intent = new Intent(this, MyActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);