活动没有在最新的android中显示

时间:2016-11-24 09:09:41

标签: android broadcastreceiver android-recents

场景 - 我没有在后台运行我的应用程序。我有一个为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出现在最近。

3 个答案:

答案 0 :(得分:3)

根据文件android:excludeFromRecents

此活动启动的任务应从最近使用的应用程序列表中排除,即概览屏幕。也就是说,当此活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用列表中。

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

这就是android:excludeFromRecentsMyActivityB设置为true,MyNewActivity从历史记录中消失的原因。

解决方案:

使用android:taskAffinity为这两项活动指定不同的任务。如果该任务不应显示在历史记录中,请android:excludeFromRecents使用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" />

答案 1 :(得分:1)

从您的清单中删除android:excludeFromRecents="true"。因为它会将你的应用从最新版本中移除。

答案 2 :(得分:0)

  

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

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

请参阅android documentation了解详情。

修复:使用 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" />