为什么活动A在活动B被销毁时开始

时间:2015-04-05 22:55:46

标签: android android-intent android-activity

我有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的?如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

当您启动B时,Android会检查现有任务是否已存在与taskAffinity相同的B(在您的情况下,与A相关联的任务) 。如果找到一个,它会将该任务带到前台并在其上面启动BB完成后,会将用户放入A

要更改此行为,您需要为B提供与taskAffinity不同的A。将其添加到B

的清单声明中
android:taskAffinity=""

现在B将在其自己的任务中启动,即使其中已存在A的现有任务。

但请注意,如果AB在不同的任务中运行,您应该为B提供不同的图标或至少不同的标签,否则用户在查看最近的任务列表时会感到困惑。他会看到A的一个条目和B的一个条目,但它们都会有相同的图标和标签。