gpt4 book ai didi

android - 从小部件启动的服务在 Oreo 中不起作用

转载 作者:太空狗 更新时间:2023-10-29 16:27:11 25 4
gpt4 key购买 nike

当我几年前实现我的小部件时,我使用了来自开发站点上的 App Widgets 页面的建议(仍然存在):“如果您的 App Widget 设置过程可能需要几秒钟(可能在执行 Web 请求时)并且如果您需要您的进程继续,请考虑在 onUpdate() 方法中启动服务。”我这样做了,当为 25 岁以上的 SDK 构建时,它就像一个魅力。

它也适用于 Android 8.0,但一旦我定位到 26,应用程序在发出 startService 调用时开始在小部件提供程序的 onUpdate 方法中崩溃。错误消息与尝试从另一个后台服务启动后台服务有关,尽管我在 list 中的服务定义中尝试了一些操作,但我无法让它工作。

当我决定我真的不需要从服务更新小部件时,我最终做了一个解决方法,所以现在直接在 onUpdate 中进行更新。服务和后台/前台问题我没怎么搞过,但我仍然想知道是否有办法继续使用服务来更新小部件。

最佳答案

在 Android O 中,我们有一个新的背景限制。当您尝试启动服务() 时,您将得到IlleagalStateException,所以现在您应该使用startForegroundService(),但是如果您通过这种新方法启动服务,您将得到RemoteServiceException。为避免此异常,您有 5 秒的时间在 startForegroundService() 之后创建 startForeground(),以通知用户您正在后台工作。

所以,在 Android O 中 where 是唯一的一种方式:

context.startForegroundService(intent)

然后在服务 onCreate() 中做类似的事情:

startForeground(1, new Notification());

更新因此,正如我所假设的,一些制造商在 Android N 上向后移植了这些新的背景限制,这就是为什么您可以在 Android N 中获得相同的异常。

关于android - 从小部件启动的服务在 Oreo 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48104037/

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