2016-11-24 73 views
1

情景 - 我没有在后台运行我的应用程序。我有一个为ACTION_USER_PRESENT实现的接收器。在这种接收机我开始一个活动,其明显的设置是:活动未显示在最近的Android

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

这是因为旗帜在它为我学分给用户,我不希望用户能够再次重新启动后才为同一个横幅。

从这个活动我启动一些按钮按下另一个活动。这一新的活动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(); 

现在我的新的活动应该出现在最近用过,如果我长按home键或[最近按钮。

但问题是,当我按回家MyNewActivity没有显示在最近。

的MyNewActivity在清单中定义是这样的:

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

什么我做错了什么,为什么不MyNewActivity是出现在最近用过。

回答

0

无论是否通过本次活动发起的任务应该从最近使用的应用程序,在总览画面的列表中排除 。 是,当此活动是新任务的根活动时,此 属性确定该任务是否不应出现在最近的应用程序的列表中 。如果任务应该从列表中排除,则设置“true”; 如果应该包含它,则设置为“false”。默认值是“false”。

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

详情请参阅android documentation

修复:使用安卓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" /> 
+0

如果我给的任务亲和力他们都那么MyNewActivity启动并在最近用过显示,但如果我的应用程序当时在与主要活动的背景,然后有我的应用程序的两个实例在最近用过 – beginner

+0

显示为所有活动赋予相同的taskaffinity值,并为MyActivityB赋予不同的值 – Swapnil

+0

如果我不分配给任何其他活动并且只分配给MyActivityB,那么也意味着其他人具有相同的亲和力(默认值)。 – beginner

1

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

+0

只有删除这不起作用。 – beginner

+0

你在删除该行后面临同样的问题 –

+0

部分答案它是但不完整 – beginner

3

按文件android:excludeFromRecents

通过这一活动发起任务应该被排除在最近使用的应用程序,在总览画面列表。也就是说,当此活动是新任务的根活动时,此属性确定该任务是否不应出现在最近的应用程序列表中。

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

这就是为什么android:excludeFromRecents设置为true时MyActivityB,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" /> 
+0

如果我给他们两个任务的亲和力,然后MyNewActivity启动并显示在最近,但如果我的应用程序然后在主要活动的背景,然后我的应用程序有两个实例在最近显示 – beginner

+0

为所有活动(“。MainActivity”)赋予相同的taskaffinity值并为MyActivityB赋予不同的值(“。MyActivityB”) – Swapnil

+1

尝试删除“android:taskAffinity =”。MyNewActivity “''从MyNewActivity' –