gpt4 book ai didi

android - 关于如何检查 Activity 是否仍然存在的 AsyncTask 最佳实践

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:08 24 4
gpt4 key购买 nike

AsyncTask 完成后,我通常会执行以下操作之一;

  1. 在我在 Activity 中定义的回调对象/接口(interface)上调用方法并传递给 My AsyncTask 子类构造函数。
  2. 为 AsyncTask 提供 Handler 并在任务完成时调用 myHandler.sendMessage()。

我想问的是AsyncTask完成后什么才是最佳实践。如果用户在处理任务时按下了主页按钮,则 Activity 不再处于前台。一旦应用尝试一些 UI 操作,作为对正在完成的任务的响应,操作系统就会抛出 WindowManager$BadTokenException。

我当然可以用 BadTokenException 捕获包围我的 UI 代码。这似乎很老套。有什么办法可以判断 Activity 是否在前面?

最佳答案

也许您不喜欢我的回答,但我认为 AsyncTask 已损坏(出于类似的原因)。

编辑:我最初的回答建议使用 IntentService 并广播结果。这就像给自己发信一样低效。

您可以使用 AsyncTaskLoader它解决了 AsyncTask 的问题,但是 AsyncTaskLoader 的 API 也远非完美。特别是,您必须确保加载器 id 是唯一的,并且要注意结果是针对 id 而不是参数缓存的。此外,异常的传播与 AsyncTask 一样中断。

解决该问题的更现代、更安全的方法是使用 Guava future .

关于android - 关于如何检查 Activity 是否仍然存在的 AsyncTask 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6929496/

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