Gau*_*rma 2 android android-service
我已经尝试过,直到现在 - 开始粘滞 - 重启服务的警报 - 删除任务启动服务 - 使用作业服务(有延迟并执行任务很慢)
是否有适当的方法来制作像流行应用程序一样的绝对可靠的后台服务?
Tim*_*Tim 15
在android中创建"不死"的后台服务是不可能的.
您可以创建一个服务并采取一些措施让它尽可能地运行,但操作系统有时会终止它并且您的服务将不会运行,直到操作系统决定重新启动它(如果它是一个粘性服务).
你可以做的事情:
MY_PACKAGE_REPLACED广播升级应用程序时启动服务.BOOT_COMPLETED和REBOOT广播(重新)启动设备时启动服务.onTaskRemoved服务,安排重新启动服务,以防用户从最近的应用列表中删除您的应用.你永远不会有100%的正常运行时间,但这会让你接近.
后台服务如果对用户不可见,总是会被 Android 系统提前或稍后终止。这就是内存管理的工作方式。
如果您确实需要使服务持续运行,则需要向用户显示永久通知(例如当您使用广播应用程序或音乐播放器应用程序时)。
Whatsapp 和 facebook 可能做的是通过任何类型的消息传递远程唤醒应用程序,例如 Firebase Cloud Messaging(前 Google Cloud Messaging)或在某些事件上使用 Broadcast Receiver...但这肯定不会发生服务。
阅读 Android 文档的这一部分以更好地理解这一点: 服务进程生命周期。
如您所见,要优先考虑您的服务进程,您需要在前台启动它并使用 startForeground(int id, Notification notification) 向其传递持续通知。在 NotificationBuilder 中使用 setOngoing(true) 将通知设置为持续通知:setOngoing(boolean b) doc。
最后,您通常希望在正在进行的通知中添加操作(例如播放器控件或关闭通知的可能性,从而在收集内存时添加您的服务)
这里是完整的示例代码:
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.drawable.ic_small_icon)
.setColor(getResources().getColor(R.color.colorAccent))
.setContentIntent(pendingIntent)
.setOngoing(true)
//.addAction(android.R.drawable.close_service,"Close", closeServiceIntent)
.build();
startForeground(Constants.NOTIFICATION_ID, notification);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |