28


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

我有两个主要的导航路径:CreateSearch

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

搜索导航如下:HomeActivity--> SearchActivity--> ResultsActivity( ListActivity) --> ResultDetailsActivity--> UpdateActivity-(完成时)-> ResultDetailsActivity(更新数据)。

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

我对Android很陌生。有人可以建议我如何避免这种情况吗?

4

6 回答 6

39

在您的 android 清单中,<activity>android:launchMode="singleTask"

如需完整列表,请查看活动文档

在您的清单中:

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

注意:不要使用单例。

于 2012-05-16T08:26:02.260 回答
34

设置以下任一标志可能会帮助您解决问题:

  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
于 2012-05-16T08:26:37.093 回答
9

在以下情况下使用Intent标志startActivity

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

旗帜有很多种。

这会很有帮助: android 单例活动

于 2012-05-16T08:25:49.740 回答
3

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

startActivityForRestult(意图,ID)

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

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

您可以为不同的活动发送已知结果并对其进行管理。例如:(
总是使用 startActivityForResult)

HomeActivity --> SearchActivity --> ResultsActivity(ListActivity) --> ResultDetailsActivity --> UpdateActivity -(完成时)-> ResultDetailsActivity(更新数据)。按 Return 并发送 SEARCH_fINISHED -->UpdateActivity 捕获它并在 onActivityResult 方法和 finish() 中发送相同的结果 --> 与 searchActivity 相同 --> Home

这也可以帮助您:

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/

于 2012-05-16T08:29:10.670 回答
1

在 JoonSung Kim 发布的答案中添加一些内容,更改 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);

为了防止同一活动的多个实例更改标志

从 :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);
于 2016-08-22T11:52:53.280 回答
0

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

于 2018-12-31T13:41:46.860 回答