Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么活动A在活动B被销毁时启动_Android_Android Intent_Android Activity - Fatal编程技术网

Android 为什么活动A在活动B被销毁时启动

Android 为什么活动A在活动B被销毁时启动,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有两个活动,比如A和B,A像往常一样通过启动图标启动。另一方面,B通过广播接收器启动。我真的不明白的是,当活动B被破坏,然后活动A被打开?我只是看不到这两者之间的联系,这种行为是不需要的。我以前通过禁用活动A上的历史记录解决了这个问题,但新功能强制使用历史记录,因此需要另一个解决方案 舱单中的活动声明: <activity android:name="com.example.A" android:noHistory="false" android:launchMode="sin

我有两个活动,比如A和B,A像往常一样通过启动图标启动。另一方面,B通过
广播接收器
启动。我真的不明白的是,当活动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>

我真的不明白,在B被摧毁后,活动B是如何变成活动A的?如何防止这种情况发生?

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

要更改此行为,您需要为
B
指定与
a
不同的
taskAffinity
。将此添加到
B
的清单声明中:

android:taskAffinity=""
现在,
B
将在它自己的任务中启动,即使已经有一个包含
A
的现有任务


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

这是造成这种情况的原因。当活动B启动时,活动A将存储在后台堆栈中,当活动B被销毁时,活动A将被带到前台。@li2,好的,我知道活动A必须存储在后台才能发生这种行为,我还不明白的是活动A是如何放置在后台的?既然活动B是从一个接收器开始的,而接收器与活动a无关?@David Wasser,你能回答我的问题吗?
android:taskAffinity=""