gpt4 book ai didi

java - ANR 中的小部件更新结果

转载 作者:行者123 更新时间:2023-11-29 07:16:28 24 4
gpt4 key购买 nike

我有一个简单的应用程序,它读取互联网资源并以 ImageView 和 TextView 的形式在小部件或 ListView Activity 中显示信息。除了从 Internet 下载数据外,它还会在 ViewFlipper 的小部件中显示数据。

当我将小部件添加到主屏幕时,它会立即触发 onUpdate,从 Internet 下载数据并更新小部件。这很好用。日志显示 onUpdatedataDownloaded,间隔大约 3 秒。在下一次更新时(手机已进入休眠模式),更新不会发生,这是我的日志报告的内容。

  • onUpdate 被调用。
  • dataDownloading 被调用,但是在 onUpdate 最初被调用 20 秒之后。我认为这是因为手机处于 sleep 状态,初始化网络套接字等需要时间。
  • 在此之后,我收到 ANR 日志条目并且小部件更新没有发生,进程实际上已经死了,小部件停留在屏幕上并且不响应 Activity 中的手动更新,否则在没有抛出 ANR 异常时工作.

我正在寻找一个可能的解决方案。我正在考虑在不同的线程中调用所有下载(从 AppWidgetProvider 中,可能使用 AsyncTask),将数据存储在 SQLite 或本地存储中并进行小部件更新(不下载,只读取数据来自 SQLite 和本地存储)在下一个 onUpdate 调用。这将使应用程序/小部件进程更具响应性,并且不会导致 ANR。

这种线程方法是一种不好的做法吗?有其他选择吗?我应该改用服务吗?我倾向于不使用服务,除非它有很多优点。

对不起,文字墙:)

编辑:来自文档 http://developer.android.com/guide/practices/design/responsiveness.html

Android 会在检测到以下情况之一时显示特定应用程序的 ANR 对话框:

  • 5 秒内对输入事件(例如按键、屏幕触摸)没有响应
  • BroadcastReceiver 未在 10 秒内完成执行

最佳答案

线程是在 Android 上安全地进行网络访问的唯一方式。所以,是的,您需要使用类似 ASyncTaskIntentService 的东西。请注意,普通的 Service 不会有太大帮助,因为它在主线程上运行。

关于java - ANR 中的小部件更新结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9160049/

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