Java 使用意图标志和androidmanifest
我有一项服务可以启动一项活动(比如Java 使用意图标志和androidmanifest,java,android,android-intent,service,Java,Android,Android Intent,Service,我有一项服务可以启动一项活动(比如活动a),如下所示: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); getApplicationContext().startActivity(intent); 启动应用程序时,活动A会出现在应用程序的第一个活动之前 我有两种解决方案: (一) 将上述代码更改为:
活动a
),如下所示:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
getApplicationContext().startActivity(intent);
启动应用程序时,活动A
会出现在应用程序的第一个活动之前
我有两种解决方案:
(一)
将上述代码更改为:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
问题:
启动活动并按home键后,我仍然可以在历史堆栈(最近的任务
)中看到该活动。为什么
启动应用程序后,这两个任务合并为一个任务,应用程序的第一个活动位于顶部。但是任何其他应用程序,创建一个新任务,活动a的任务仍然保留。为什么
(二)
将上述代码更改为:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
并在舱单中添加:
<activity
android:name="org.achartengine.GraphicalActivity"
android:taskAffinity="org.achartengine"
>
其中Activity A
=android:name=“org.achartengine.GraphicalActivity”
问题:
我保留不必要的任务堆栈
我假设很少有人从服务开始这项活动。即使这样,他们也只会做一次。这意味着,当用户单击home/back键时,从任何历史堆栈中清除活动会更加整洁
首选哪种选项?(或另一个?一个快速修复方法是将android:launchMode=“singleTop”添加到清单中的活动中,这样将只有一个而不是多个实例。完成同样事情的另一种方法是在开始意图之前使用以下内容
Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
在清单中还有其他几种可能性可以尝试
android:noHistory="true"
确保你的电话在打
finish();
结束这一意图
用于活动或这两个意图标志的组合
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
如果上述方法不起作用,我能想到的最后一件事就是
moveTaskToBack(true);
这并不能解决问题
希望这能有所帮助。这是一种将第一个活动从堆栈中移除的方法
Thread nohistory = new Thread () {
public void run () {
try {
Intent i = new Intent(Splash.this, ActivitySplash.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
};
nohistory.start();
但我的问题不是多个实例。这是因为“主页”选项卡没有从历史堆栈中清除活动A历史堆栈和最近的应用程序之间有什么区别?虽然为所有活动应用程序维护了历史堆栈,但它是每个应用程序的堆栈,其中包含活动应用程序的活动列表,当活动结束时,它会被推到“后”堆栈上。