gpt4 book ai didi

android - appwidget 卡住并拒绝更新 : ignores updateAppWidget

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:53 26 4
gpt4 key购买 nike

所以我有一个应用程序小部件,它可以很好地刷新,像发条一样定期将新位图加载到 ImageView 中。然后,在某个时候,它会静静地停止更新。我可以从日志和我的代码正在查询的服务器上的 Activity 中看出,该小部件实际上仍在继续定期触发(通过 onReceive() 捕获的广播,并将其作为预期。唯一没有发生的是小部件内容没有更新。

所以,在小部件触发时执行的代码中,我正在创建一个新的 RemoteViews 并向其中添加内容,包括通过 remoteViews.setImageViewBitmap(imageViewID, bmp) 加载一个新的位图,然后最后调用 appWidgetManager.updateAppWidget(appWidgetId, remoteViews) 来更新小部件内容。工作得很好......直到它停止工作。

我不确定要发布什么代码,因为它在 99% 的时间里都能正常工作,但偶尔 updateAppWidget() 会无缘无故地停止工作。看起来这是一个系统问题,而不是我的代码中的错误,但我可能是错的。

唯一可能提示的是当连接发生变化时,例如从无信号到WiFi,可能经常发生这种变化。它似乎在那些情况下发生得更多。

一旦小部件卡住,唯一能解冻的就是重启设备。如果不重新启动,即使删除小部件并添加新的小部件也不起作用。事实上,添加一个新的会导致一个死的小部件甚至不响应单击以打开配置 Activity ,大概是因为 remoteViews.setOnClickPendingIntent(R.id.widget, configPendingIntent) 是像 RemoteViews 中的其他所有内容一样被忽略,我仔细构建并发送到 appWidgetManager.updateAppWidget()

这似乎与这里许多其他人所描述的非常相似:

https://code.google.com/p/android/issues/detail?id=28216

到目前为止,似乎还没有已知的治愈方法。帖子在https://code.google.com/p/android/issues/detail?id=28216#c56似乎提供了一些 promise ,但我已经尝试在不同的地方调用 AppWidgetHost.startListening(),包括定期通过重复警报来查看我是否可以启动小部件,但似乎没有任何效果.

其他用户(而不是开发人员)似乎也看到了这个问题:http://androidforums.com/threads/clock-widget-keeps-freezing-please-help.530333/

有什么想法吗?它慢慢地让我发疯!

最佳答案

remoteViews.setImageViewBitmap(imageViewID, bmp)

不要这样做。这样做会打包位图并将整个东西作为 Binder 事务发送。 Binder 旨在传输少量数据并且不能很好地处理位图。即使小部件不断更新,它也使用了比需要更多的系统资源和更多的启动器资源(启动器必须解包位图,至少暂时存储已打包的字节和未打包的字节,并且必须在 UI 线程上完成. 但您看到的问题是您链接的错误,有时大型 Binder 事务会触发 TransactionTooLargeException 并且 AppWidgetManagerService 通过停止所有 future 更新(有时对所有小部件)错误地处理此问题,有时只是给你的)。

相反,您应该使用 setImageViewUri https://developer.android.com/reference/android/widget/RemoteViews.html#setImageViewUri(int,%20android.net.Uri) .这是一个多一点的工作,因为你需要保存位图,然后为它发送一个 uri,尽管目前所有或几乎所有的启动器都有 READ_EXTERNAL_STORAGE 所以 file:/// uri 到外部存储可能会起作用,你以后不应该依赖它,而应该使用 FileProvider https://developer.android.com/reference/android/support/v4/content/FileProvider.html

关于android - appwidget 卡住并拒绝更新 : ignores updateAppWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020222/

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