繁体   English   中英

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

[英]How to avoid multiple instances of same Activity?


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

我有两个主要的导航路径: 创建搜索

创建路径的导航如下: HomeActivity - > CreateActivity - (完成时) - > HomeActivity

搜索导航如下: HomeActivity - > SearchActivity - > ResultsActivityListActivity ) - > ResultDetailsActivity - > UpdateActivity - (完成时) - > ResultDetailsActivity (带有更新的数据)。

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

我对Android很新。 有人可以建议我怎么能避免这个?

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

  • 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单例活动

管理活动的最佳形式是使用

startActivityForRestult(意图,ID)

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

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

您可以为差异活动发送已知结果并进行管理。 例如:
(Allways with startActivityForResult)

HomeActivity - > SearchActivity - > ResultsActivity(ListActivity) - > ResultDetailsActivity - > UpdateActivity - (完成时) - > ResultDetailsActivity(带有更新的数据)。 按Return键并发送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/

JoonSung Kim发布的答案很少添加,更改addFlag方法会抛出“无法解决错误”

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

to: 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);

to: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

代码应该是:

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

我的问题是setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 在onCreate(...)Activity方法中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM