【问题标题】:How many instances have been created when we call activity using intent again n again without finishing it in android?当我们再次使用intent再次调用活动而不在android中完成它时,已经创建了多少个实例?
【发布时间】:2012-09-12 04:59:21
【问题描述】:

在我的活动 A 中,我使用 Intent 调用活动 B。在活动 B 中,我重写了 onBackPressed(),并从中调用了活动 A,但不使用 finish()。那么当我们再次从 A 调用活动 B 时,是使用相同的活动 B 实例还是创建新实例? 在没有完成活动的情况下再次调用 n 是不是坏主意?如果是,如何防止每次都创建活动 B 的新实例?在这种情况下,清单中的 android:launchMode="singleTask" 是否有帮助?

【问题讨论】:

标签: android android-activity


【解决方案1】:

您可以在调用 Activity 之前在 Intent 中设置 FLAG_ACTIVITY_REORDER_TO_FRONT 标志。如果已启动,此标志将导致已启动的活动被带到其任务历史堆栈的前面,因此不会创建该活动的新实例。例如

Intent settingIntent = new Intent(ActivityA.this, ActivityB.class);                         
settingIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
ActivityA.this.startActivity(settingIntent);

【讨论】:

  • 但是如果我们再次调用活动B时使用上面的代码,则不会调用oncreate()方法..有什么原因吗?
  • 是的,因为通过设置此标志,您已经启动的活动将从活动堆栈中移到最前面。并且仅在新启动活动时才调用 onCreate。如果该活动在活动堆栈中不可用,此代码将首次启动该活动,因此 onCreate 将仅在第一次被调用,但随后每当您通过设置此标志启动此活动时,它将检查它是否已启动。并使用现有的活动。但是您可以使用该活动的“onPause”和“onResume”方法来处理您的变量。
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2021-10-25
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多