如何让一个服务一直运行?

3

我有一些需要一直在后台运行的进程。

所以我将它们设为了一个服务

我的问题是:有没有办法防止用户停止这个服务?(即使他使用第三方应用程序)

5个回答

9

是的,但我不是在说普通的应用程序,我是在说一些我在手机系统中"烧录"的系统.. 我需要这个系统始终作为服务运行,并且不允许用户禁用该服务.. 我考虑过AlarmManager.. 你觉得呢?谢谢, 雷。 - undefined
3
不可能拥有永久的Android服务。您可以编写C/C++守护程序作为固件的一部分,据我所知,这些守护程序是不可杀死的,但最好在http://source.android.com/discuss上向官方Android开源项目Google Groups提出相关问题。 - undefined
嗨 @CommonsWare,例如:慢性药物是个好主意。 - user3402040
如果你关闭应用程序,可以使用AlarmManager来实现无限的定时(例如日期99/99/99999)。你可以创建另一个服务来实现。 - user3402040
@delive:用户始终可以强制停止您的应用程序,这将删除您预定的闹钟等功能。 - undefined

5
也许这可以帮助您:
final Intent intent = new Intent(context, YourService.class);
final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0);
final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(pending);
long interval = 30000;//milliseconds
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),interval, pending);

这样,您的服务将会从AlarmManager接收到定期的onStart事件。如果您的服务被停止了,它将会被重新启动。因此,您可以说它将无限运行。

更完整的示例可在Photostream示例应用程序中找到http://code.google.com/p/apps-for-android/


这将无法在当前版本的Android上经受住“任务杀手”的攻击。任务杀手利用的API也会清除服务的闹钟。 - undefined

1

在服务的onDestory方法中发送广播,在广播接收器的onReceive方法中重新启动服务。但是请确保您的服务资源得到控制。


1

•一个已启动的服务可以使用startForeground(int, Notification) API将该服务置于前台状态,在此状态下,系统认为用户正在积极使用该服务,因此在低内存时不会考虑将其终止。 (在当前前台应用程序的极端内存压力下,该服务仍然理论上可能被杀死,但在实践中这不应成为问题。)


0

我已经有了, 但是我该如何保护我的服务,以免第三方应用程序(如:appKiller)能够随意终止它?谢谢,雷, - undefined
如上所述,您无法保证您的服务始终存在。我在其中一个服务中所做的是让服务在后台执行其工作,然后设置一个闹钟,以便在下次需要工作时唤醒它。然后服务会自行关闭。否则,请为您的服务注册一些系统事件过滤器,以响应所需的事件。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接