gpt4 book ai didi

android - 拥有一个 Activity 实例

转载 作者:IT老高 更新时间:2023-10-28 23:07:06 25 4
gpt4 key购买 nike

我在 Activity 导航和后台堆栈方面遇到问题,希望您能帮我解决。

问题

Root Activity >>> SecondActivity >> HomeButton

然后这会将我带到主页并从那里选择...

Gmail >> 消息 >> 在我的应用程序中打开附件 >> ImportActivity >> RootActivity

结果是启动了一个新任务,并使用了我的应用程序的另一个实例。这是 Not Acceptable ,因为我不想运行两个单独的任务,我只想要一个。

期望的结果

我想要发生的是当用户打开附件并且 ImportActivity 完成其所做的事情(它已将 android:noHistory 设置为 true)并调用 startActivity(intent), RootActivity 已启动,但在原始任务中只保留一个实例,其余的 Activity 在它之上(在本例中为 SecondActivity) 被删除。

我想要这样做的原因是,如果用户在导入文件后导航出我的应用程序,然后触摸应用程序图标,它会加载第一个任务及其后堆栈,并且我有两个任务正在运行,用户可以在两个任务中我的应用程序的不同部分。

我的尝试

我玩过启动模式,但它们都没有真正提供我需要的功能。

我尝试过的启动模式..

android:launchMode="singleTask" - 这只是在每次启动根 Activity 时再次启动它。即使用户在我的应用程序中按下了主页按钮并触摸了应用程序图标,后台堆栈也会被破坏。

android:launchMode="singleInstance = 不允许任何其他 Activity 在任务中运行。

另外,在调用 Intent 启动 RootActivity 时,我使用以下方法无济于事。

Intent i = new Intent(ImportActivity.this,TrackingActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

有没有可能做我想做的事?

提前致谢

最佳答案

你说

Gmail >> Message >> Open attachment in my application >> ImportActivity >> RootActivity

但这可能不对。在这种情况下,gmail 会针对您应用中的 ImportActivity 发出 IntentImportActivity 将执行。然而,我对 https://developer.android.com/guide/components/tasks-and-back-stack.html 的阅读建议 ImportActivity 将作为与 gmail 相同的任务的一部分执行,并将被放在 gmail 任务的后台堆栈的顶部,除非您在 list 中采取特殊步骤来防止这种情况或 gmail 专门调用它作为一个单独的任务。当 ImportActivity 完成时,它不应该调用 startActivity(intentForRootActivity) 而应该只调用 finish() 以便它将被销毁并且 Activity 来自位于后堆栈中的位于其下方的 gmail 将出现。

如果 ImportActivity 确实调用了 startActivity(intentForRootActivity) 那么 RootActivity 只会进入 gmail 任务的顶部并出现在 gmail 背面堆。触摸 home 然后 gmail 的启动器图标会看到 RootActivity 重新出现,将 gmail 隐藏在下面。

我认为您需要在 ImportActivity 的 list 声明中使用 android:launchMode="standard"

代表您应用的较旧的独立实例的任务不会被修改。如果有人触摸了您应用的启动器图标,您的应用的旧状态将被恢复,不受 gmail 任务中发生的任何事情的影响。

文档http://developer.android.com/guide/components/processes-and-threads.html关于 Activity 如何映射到这里的进程相当模糊(导致大卫瓦瑟评论我的早期版本的这个答案),但似乎 gmail 的 Activity 将在一个 linux 进程中执行,具有一个 linux 用户 ID 和 ImportActivity 将在另一个具有另一个用户 ID 的 linux 进程中执行。但是,它们都可以构成具有一个回栈的一项任务的一部分。

ImportActivity 将作为 gmail 任务的一部分执行,其有效 Linux 用户 ID 与它作为独立应用程序的一部分执行时相同 - 与 gmail 的 Linux 用户 ID 不同执行。这听起来不太可能而且很复杂,但 https://developer.android.com/guide/components/fundamentals.html 似乎暗示了这一点。 .那讲得通;如果 ImportActivity 需要获取为您的应用程序存储的用户首选项,它需要读取首选项文件,就好像它是为您的应用程序定义的用户,而不是为 gmail 定义的用户。

我还没有尝试执行任何这些。如果我完全掌握了错误的一端,我相信很快就会有人告诉我们!

关于android - 拥有一个 Activity 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847151/

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