如何防止我的Android应用/服务被任务管理器“杀死”?

时间:2010-05-07 02:39:24

标签: android service kill taskmanager

我的服务保持运行非常重要,直到有密码的人从我的UI屏幕停止服务。我的应用程序运行良好但它的设计是由他们的孩子手机上的父母(带密码)打开/关闭。我已经设法使一切正常,但我遇到的问题是,如果孩子使用任务管理器来终止我的服务,那么我的应用程序是无用的。我会很感激能够找到方法的人

1)监控服务并在其“被杀”后自动重新启动 要么 2)防止某人杀死它,除了从启动该服务的活动(管理屏幕)。或两者兼而有之?

如果我不清楚描述问题,我很抱歉,我是初学者。到目前为止,我已经取得了很大的进步,但我陷入了最后的障碍。

6 个答案:

答案 0 :(得分:10)

您可以使用API​​方法:startForeground()。以下是对它的解释:

  

启动的服务可以使用startForeground(int,Notification)API   将服务置于系统考虑的前台状态   它是用户积极意识到的东西,因此不是   当内存不足时被杀的候选人。 (理论上还是如此   可能会在极端记忆压力下杀死该服务   从当前的前台应用程序,但在实践中这应该   不要担心。)

Here你可以找到一个如何使用它的例子。

至于问题,您无法阻止服务被杀死。它可以被系统杀死。甚至可以杀死系统服务。如果发生这种情况,则重新启动。您可以使用相同的方法。

答案 1 :(得分:5)

没有root设备,没有办法直接阻止这种情况。 SDK有助于防止出现这类问题。

你可以做“真正的邪恶”技巧,并在两个应用程序中有两个服务。每个服务都监视另一个服务,如果停止则重新启动它。这很愚蠢,但在大多数情况下,即使是速度最快的孩子也无法杀死这两个应用程序。

答案 2 :(得分:5)

您可以编写一个帮助应用程序来接收Android广播"android.intent.action.PACKAGE_RESTARTED",当您的应用程序被杀时,您的助手将收到该广播,您可以重新启动您的应用程序或其他任何内容。

这就是'Smart App Protector Free'的用法。

糟糕的是用户必须安装两个应用而不是一个。

答案 3 :(得分:3)

对于仍在寻找答案的人 - 这可能是正确的:

你不能:使服务不可杀死,如果在低内存运行,系统将永远终止您的服务。但是

您可以:告诉系统在服务被杀死时重新启动服务。看看这段代码:

public static final int START_REDELIVER_INTENT

在API级别5中添加

从onStartCommand(Intent,int,int)返回的常量:

如果此服务的进程在启动时被终止(从onStartCommand(Intent,int,int)返回后),那么它将被安排重新启动,并且最后一次传递的Intent通过onStartCommand再次传递给它(Intent ,int,int)。 此Intent将保持计划重新传递,直到服务调用stopSelf(int),并将启动ID提供给onStartCommand(Intent,int,int)。该服务不会接收带有null Intent的onStartCommand(Intent,int,int)调用,因为只有在没有完成处理发送给它的所有Intent时才会重新启动它(并且任何此类挂起事件将在重启点)。

常数值:3(0x00000003)

答案 4 :(得分:1)

如果您具有系统级权限,请通过清单权限使用persistent:true

https://developer.android.com/guide/topics/manifest/application-element

答案 5 :(得分:0)

只需将返回类型设置为START_TICKY。