阻止某些用户关闭Android服务

Nik*_*ant 11 service android

我在Android上提供服务,它将安装在手机/平板电脑上.许多人可以使用该平板电脑,但只有选定的平板电脑应该有权关闭服务.我怎样才能做到这一点?我用Google搜索并找到了一些选项:

  • 建立用户帐户:有很多应用程序,但它们没有指定在一个帐户中运行的服务是否也会运行其他帐户.
  • 在关闭服务之前提示输入密码:有很多stackoverflow Q.for this但看起来不可能.
  • 用户关闭服务时重新启动服务:重新启动可能会导致数据丢失,因为我的服务不断与其他设备通信以收集数据.

新选择:

我有另一个想法让它工作:我将使它成为系统应用程序,以便当他试图阻止它时它将警告用户.对于系统应用程序,当用户从设置中按下"停止"按钮时,会弹出一条警告消息:"关闭此应用程序可能会导致...(等等等等)......".你知道抛出这条消息会引起什么意图吗?我想我可以在这里使用这个意图并禁用此消息中的"确定"选项

我想禁用这个.

sel*_*bie 6

即使用户无法停止服务,手机仍然可能会断电,电量耗尽或丢失网络连接.甚至可以想象,如果资源运行不足,Android可能会终止服务流程.因此,代码应该准备好处理这些事件中潜在的数据丢失.

我不确定你是如何检测服务何时停止的,但总是有AlarmManager用于定期轮询.


Com*_*Guy 5

阻止服务关闭几乎是不可能的.但是,您可以在服务关闭后立即重新启动服务.

使用startForeground.如文档中所述:

已启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统将其视为用户主动了解的内容,因此在内存不足时不会成为查杀的候选者.(从理论上讲,服务在当前前台应用程序的极端内存压力下被杀死仍然是可能的,但实际上这不应该是一个问题.)

返回START_STICKY从你onStartCommand作为一个用户关闭你的服务,尽快重新启动服务.在大多数情况下,您的服务将在<5s内重新启动,但这取决于您的服务连续被杀的频率.

这两种方法将使您的服务几乎无法收回.