我有一项启动活动的服务(比如Activity A
),如下所示:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
getApplicationContext().startActivity(intent);
当我启动我的应用时,Activity A
会在应用的第一个活动之前出现。
我有两种解决方案可以解决这个问题:
1)
将上述代码更改为:
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
问题:
启动活动并按下主页后,我仍然在历史堆栈中看到活动(= recent tasks
)。怎么来的?
在我启动应用程序后,这两个任务合并为一个,应用程序的第一个活动位于顶部。但任何其他应用程序,创建一个新任务,Activity A
的任务仍然存在。怎么来的?
2) 将上述代码更改为:
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键时,从任何历史堆栈中清除活动会更加整洁。
首选哪个选项? (或另一个?)
答案 0 :(得分:1)
快速解决方法是将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);
并没有解决问题。
希望这有帮助。
答案 1 :(得分:0)
这是一种将第一项活动从堆栈中移除的方法。
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();