场景 - 我没有在后台运行我的应用程序。我有一个为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出现在最近。
答案 0 :(得分:3)
根据文件android:excludeFromRecents
此活动启动的任务应从最近使用的应用程序列表中排除,即概览屏幕。也就是说,当此活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用列表中。
默认情况下,应用程序的所有活动都具有相同的亲缘关系。具有相同亲和力的活动在概念上属于同一任务。因此,在这种情况下,MyActivityB
和MyNewActivity
都属于同一个任务。 android:excludeFromRecents
确保最近的应用中未列出任务。
这就是android:excludeFromRecents
为MyActivityB
设置为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" />