Android TileService是否被视为前台进程
在安卓系统中,我们有一些新功能。例如,我们只能通过Android TileService是否被视为前台进程,android,android-service,android-service-binding,android-8.0-oreo,Android,Android Service,Android Service Binding,Android 8.0 Oreo,在安卓系统中,我们有一些新功能。例如,我们只能通过Context.registerReceiver方法注册隐式广播。当系统终止我们的进程时(例如,由于内存不足),注册的接收器也将被销毁 为了减少系统终止进程的可能性,我们必须告诉系统该进程仍处于前景中。根据,如果以下任一情况属实,则应用程序被视为处于前台: 它有一个可见的活动,无论该活动是已启动还是已暂停 它有一个前台服务 另一个前台应用程序通过绑定到其服务或使用其内容提供商之一连接到该应用程序。例如,如果另一个应用程序绑定到其: 输入法 墙纸
Context.registerReceiver
方法注册隐式广播。当系统终止我们的进程时(例如,由于内存不足),注册的接收器也将被销毁
为了减少系统终止进程的可能性,我们必须告诉系统该进程仍处于前景中。根据,如果以下任一情况属实,则应用程序被视为处于前台:
- 它有一个可见的活动,无论该活动是已启动还是已暂停
- 它有一个前台服务
- 另一个前台应用程序通过绑定到其服务或使用其内容提供商之一连接到该应用程序。例如,如果另一个应用程序绑定到其:
- 输入法
- 墙纸服务
- 通知侦听器
- 语音或文本服务
TileService
(用于快速设置tiles)怎么样?当我们在mainfest文件中将TileService
注册为ACTIVE\u TILE
时,系统不会在每次TILE变为可见时绑定服务(如本文所述),因此我们的服务会绑定到另一个应用程序,面对系统进程
那么,我的应用程序(只要将互动程序添加到“快速设置”窗格)是否被视为前台应用程序?这将是很好的,因为我不需要这种方法的持久通知,而且用户也可以在后台发送我的应用程序(通过移除互动程序)
那么,我的应用程序(只要将互动程序添加到“快速设置”窗格)是否被视为前台应用程序
不正常。引用您链接到的文章:
重要的是要注意,当用户不查看互动程序时,您的互动程序服务
通常肯定会解除绑定(并销毁) — 不要假设您的服务在onstartstening()
/onstopstening()
对方法之外是活动的
因此,在大多数情况下,您的服务将被解除绑定并销毁
系统不会在每次磁贴可见时绑定服务(如本文所述) 我猜你指的是以下段落: 在活动模式下,您的
TileService
仍将绑定到onTileAdded()
和onTileRemoved()
(以及单击事件)。但是,只有在调用staticTileService.requestListeningState()方法之后,才会收到对onStartListening()的回调。然后,在收到对onStopListening()
的回调之前,您将能够准确地更新磁贴一次。这为您提供了一个简单的一次性功能,可以在数据更改时立即更新磁贴,无论磁贴是否可见
由于活动互动程序不必在每次互动程序可见时都绑定,因此活动互动程序更有利于系统健康。构建活动磁贴意味着每次“快速设置”面板可见时,系统需要绑定到的进程更少。(当然,系统已经根据可用内存等限制绑定的TileServices
的数量,但到那时,您已经接近内存波动的边界 — 不是你想去的地方。)
我希望会有某种超时机制:如果调用requestListeningState()
,然后在X秒内不更新磁贴,将使用onstopstening()
调用您。倾听状态不持久;它只适用于一次更新。因此,系统应该期望及时更新。我将测试这个场景,如果TileService
可以无限期地以这种方式绑定,我将提交一份错误报告,因为这是对系统资源的浪费。使用TileService
而不是前台服务有什么好处?@IgorGanapolsky:它们实际上并不相关TileService
用于在通知阴影中显示互动程序,我不希望它通常是前台服务(因为这样您就有一个通知,不需要互动程序)。事实上,我发现TileService的一个优点是,它会在设备启动时自动启动。我们不能用前台服务做到这一点。只有WorkManager可以这样做。@IgorGanapolsky:“我们不能用前台服务来做”——您可以使用操作\u BOOT\u COMPLETED
接收器来启动前台服务。