几年前,当我实现我的窗口小部件时,我使用了开发站点上的“应用程序窗口小部件”页面(仍然存在)中的以下建议:“如果您的应用窗口小部件设置过程可能需要几秒钟(也许在执行Web请求时),并且您需要您的过程继续进行,请考虑使用onUpdate()方法启动服务。” 我做到了,当为多达25个SDK开发时,它就像一个魅力。
它也可以在Android 8.0上运行,但是当我的目标是26时,该应用在发出startService调用时便开始在小部件提供商的onUpdate方法中崩溃。该错误消息与尝试从另一个后台服务启动后台服务有关,尽管我尝试了清单中服务定义中的一些操作,但无法使它正常工作。
当我确定确实不需要从服务中更新窗口小部件时,我最终做了一个解决方法,因此现在直接在onUpdate中进行更新即可。服务和背景/前景问题我并没有太多困扰,但是我仍然想知道是否有一种方法可以继续使用服务来更新小部件。
在Android O中,我们有一个新的背景限制。尝试启动startService()时,将获得IlleagalStateException,因此现在应使用startForegroundService(),但是如果通过此新方法启动服务,则将获得RemoteServiceException。为避免此异常,您需要在startForegroundService()之后有5秒钟的时间使startForeground()通知用户您正在后台工作。
因此,Android O中只有一种方法:
context.startForegroundService(intent)
Run Code Online (Sandbox Code Playgroud)
并在服务中onCreate()做这样的事情:
startForeground(1, new Notification());
Run Code Online (Sandbox Code Playgroud)
更新 据我所知,一些制造商已经在Android N上反向移植了这些新的背景限制,这就是为什么您可以在Android N中得到相同的异常的原因。
| 归档时间: |
|
| 查看次数: |
2304 次 |
| 最近记录: |