1

场景 - 我没有在后台运行我的应用程序。我为 ACTION_USER_PRESENT 实现了一个接收器。在此接收器中,我启动了一个活动,其清单设置为:

<activity android:name=".activity.MyActivityB"
        android:excludeFromRecents="true"
        android:noHistory="true"
        android:screenOrientation="portrait"/>

这是因为其中有横幅,我将积分归功于用户,并且我不希望用户能够为同一个横幅一次又一次地启动它。

从这个活动中,我在某个按钮按下时启动另一个活动。这个新的 Activity MyNewActivity 是这样启动的:

 Intent intent = new Intent(MyActivityB.this, MyNewActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                this.startActivity(intent);
                Intent closeintent = new Intent("MAIN_ACTIVITY_CLOSE");
                closeintent.putExtra("action", "close");
              LocalBroadcastManager.getInstance(this).sendBroadcast(closeintent);
                MyActivityB.this.finish();

现在,如果我长按主页按钮或最近的按钮,我的新活动应该出现在最近的活动中。

但问题是,当我按下主页时,MyNewActivity 没有显示在最近。

MyNewActivity 在 Manifest 中定义如下:

 <activity
        android:name=".activity.MyNewActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" />

我做错了什么,为什么最近没有出现 MyNewActivity。

4

3 回答 3

3

根据文档android:excludeFromRecents

此活动启动的任务应从最近使用的应用程序列表(概览屏幕)中排除。也就是说,当这个activity是一个新任务的根activity时,这个属性决定了这个task是否不应该出现在最近的应用列表中。

默认情况下,应用程序的所有活动都具有相同的亲和性。具有相同亲和力的活动在概念上属于同一任务。因此,在这种情况下,两者都MyActivityB属于MyNewActivity同一个任务。android:excludeFromRecents确保任务未在最近的应用程序中列出。

这就是原因,当android:excludeFromRecents设置为真时MyActivityBMyNewActivity从历史中消失。

解决方案:

用于android:taskAffinity为这两个活动指定不同的任务。如果该任务根本不应该显示在历史记录中,请使用android:excludeFromRecentsfor 。MyActivityB

<activity android:name=".activity.MyActivityB"
        android:taskAffinity=".MyActivityB"
        android:excludeFromRecents="true"
        android:noHistory="true"
        android:screenOrientation="portrait"/>

 <activity
        android:name=".activity.MyNewActivity"
        android:taskAffinity=".MyNewActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" />
于 2016-11-24T09:40:06.830 回答
1

android:excludeFromRecents="true"从你的清单中删除。因为它会从最近删除您的应用程序。

于 2016-11-24T09:32:45.660 回答
0

此活动启动的任务是否应从最近使用的应用程序列表中排除,概览屏幕。也就是说,当这个activity是一个新任务的根activity时,这个属性决定了这个task是否不应该出现在最近的应用列表中。如果该任务应从列表中排除,则设置为“true”;如果应该包含它,则设置为“false”。默认值为“假”。

从中android:excludeFromRecents删除当前任务中的所有活动。在android中,除非您指定,否则应用程序中的所有活动都具有相同的亲和力并且属于相同的任务。在您的情况下,因为新活动与您以前的活动在同一任务中开始,并且android系统也在从最近的列表中删除新活动。因此,您需要android:taskAffinity在清单中为清单中的每个活动指定,它将解决您的问题。

有关详细信息,请参阅android 文档。

修复:使用android:taskAffinity

<activity android:name=".activity.MyActivityB"
        android:excludeFromRecents="true"
    android:taskAffinity=".MyActivityB"
        android:noHistory="true"
        android:screenOrientation="portrait"/>

 <activity
        android:name=".activity.MyNewActivity"
    android:taskAffinity=".MyNewActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" />
于 2016-11-24T09:30:51.770 回答