gpt4 book ai didi

java - 使用 Intent 标志和 androidmanifest

转载 作者:行者123 更新时间:2023-12-01 14:17:51 25 4
gpt4 key购买 nike

我有一个启动 Activity 的服务(例如 Activity A),如下所示:

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
getApplicationContext().startActivity(intent);

当我启动应用程序时,Activity A 出现在应用程序的第一个 Activity 之前。

我有两个解决方案来解决这个问题:

1)

将上面的代码更改为:

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);

问题:

启动 Activity 并按 Home 键后,我仍然在历史堆栈中看到该 Activity(=最近任务)。怎么会这样?

启动应用程序后,这两个任务合并为一个,应用程序的第一个 Activity 位于顶部。但对于任何其他应用程序,创建一个新任务并保留 Activity A 的任务。怎么会这样?

2)将上面的代码修改为:

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
| Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);

并添加到 list :

   <activity
android:name="org.achartengine.GraphicalActivity"
android:taskAffinity="org.achartengine"
>

其中 Activity A = android:name="org.achartengine.GraphicalActivity"

问题:我保留了不必要的任务堆栈。

我认为很少有人从该服务开始该 Activity 。即便如此,他们也只会这样做一次。这意味着当用户单击主页/后退键时,从任何历史记录堆栈中清除 Activity 会更加简洁。

哪个选项是首选? (或者另一个?)

最佳答案

一种快速修复方法是将 android:launchMode="singleTop"添加到 list 中的 Activity 中,这样就只有一个实例,而不是多个实例。完成同样事情的另一种方法是在开始 Intent 之前使用以下内容。

Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

在 list 文件中还有一些其他的可能性可以尝试

android:noHistory="true"

并确保您正在调用电话

finish();

结束这个 Intent 。

针对 Activity 或这 2 个 Intent 标志的组合

Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP

如果以上不起作用,我能想到的最后一件事是

moveTaskToBack(true);

这并不能解决问题。

希望这有帮助。

关于java - 使用 Intent 标志和 androidmanifest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com