【发布时间】:2015-04-05 22:55:45
【问题描述】:
我有 2 个活动,比如 A 和 B,A 像往常一样通过启动器图标启动。另一方面,B 是通过BroadcastReceiver 启动的。我在这里不太明白的是,当活动 B 被破坏然后活动 A 被打开时?我只是看不到这其中的联系,而且这种行为是不想要的。我之前通过禁用活动 A 的历史记录解决了这个问题,但新功能强制使用历史记录,因此需要另一种解决方案。
清单中的活动声明:
<activity android:name="com.example.A"
android:noHistory="false" android:launchMode="singleTask"
android:label="@string/APP_NAME">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.B" android:noHistory="true"
android:screenOrientation="portrait" android:label="@string/APP_NAME">
</activity>
以及如何从BroadcastReceiver启动活动B:
Intent intent = new Intent(context, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.getApplicationContext().startActivity(intent);
我只是不明白活动 B 在 B 被销毁后如何找到活动 A 的方式?如何防止这种情况发生?
【问题讨论】:
-
是activity's tasks and back stack 造成的。 Activity B 启动时,Activity A 会被存储在后台栈中,当Activity B 被销毁时,Activity A 会被带到前台。
-
@li2,Okey,我知道活动 A 必须存储在后台堆栈中才能发生这种行为,我还不明白活动 A 是如何放置在后台堆栈中的?由于活动 B 是从接收者开始的,与活动 A 无关?
标签: android android-intent android-activity