如何让android的service一直在后台运行

如何让android的service一直在后台运行,第1张

Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要的任务。而一些安全软件,会有结束进程的功能,如果不做Service的保持,就会被其杀掉。

如何保持Service的运行,其核心就是利用ANDROID的系统广播,这一不会被其他软件影响的常驻程序触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。

利用的系统广播是IntentACTION_TIME_TICK,这个广播每分钟发送一次,可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。

下边就是具体的代码和注意事项了:

1、 IntentACTION_TIME_TICK的使用

开发人员知道广播的注册有静态注册和动态注册,但此系统广播只能通过动态注册的方式使用。即不能通过在manifestxml里注册的方式接收到这个广播,只能在代码里通过registerReceiver()方法注册。

在ThisApp extends Application 里注册广播:

IntentFilter filter = newIntentFilter(IntentACTION_TIME_TICK);

MyBroadcastReceiver receiver = new MyBroadcastReceiver();

registerReceiver(receiver, filter);

在广播接收器MyBroadcastReceiver extends BroadcastReceiver的onReceive里

if (intentgetAction()equals(IntentACTION_TIME_TICK)) { //检查Service状态 }

2、Service的检查与启动

boolean isServiceRunning = false;

ActivityManager manager = (ActivityManager)ThisAppgetContext()getSystemService(ContextACTIVITY_SERVICE);

for (RunningServiceInfo service :managergetRunningServices(IntegerMAX_VALUE))

{

if("soxxxxWidgetUpdateService"equals(serviceservicegetClassName()))

//Service的类名

{ isServiceRunning = true; }

}

if (!isServiceRunning) {

Intent i = new Intent(context, WidgetUpdateServiceclass);

contextstartService(i);

}

关于Service的开机启动。

实现和上边的类似,也是通过监控开机的系统广播来启动Service。但其实做了上边的检查也就不会做开机启动了,因为过一两分钟就会通过上边的程序启动Service了。代码如下:

if (intentgetAction()equals(IntentACTION_BOOT_COMPLETED))

{

Intent i = new Intent(context, LogServiceclass);

contextstartService(i);

}

要看你的功能了

假设不需要中途总是查看这个倒计时,长达几天的话,可以调用日历,精确到天(也可以到小时分钟)之后,收到提醒再起service。由service启动你要启动的东西。

如果你中途要查看调整这个倒计时,那你只能用service。加些属性使它可以长存。如果关机,把时间写入到文件或者preference,开机再续计时,只有一些清理程序的软件能把这个service干掉。

activity主要用途是显示页面,不同于service,android系统喜欢对这类对象进行自动回收。如果你硬要它长存也可以的,设置属性能让它存在很长时间。但不建议使用。

android还有一类硬时钟,可以在关机状态下也依然计时,并且执行一些程序,你可以google一下。

Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。如果service是被绑定的,它们它的活动生命周期是在onUnbind()方法返回后结束。

service积极活动的生命时间(active lifetime)是从onStartCommand()或onBind()被调用开始,它们各自处理由startService()或bindService()方法传过来的Intent对象。

扩展资料

service整体的生命时间是从onCreate()被调用开始,到onDestroy()方法返回为止。和activity一样,service在onCreate()中进行它的初始化工作,在onDestroy()中释放残留的资源。

比如,一个音乐播放service可以在onCreate()中创建播放音乐的线程,在onDestory()中停止这个线程。onCreate()和onDestroy()会被所有的service调用,不论service是通过startService()还是bindService()建立。

参考资料来源:百度百科——Service

以上就是关于如何让android的service一直在后台运行全部的内容,包括:如何让android的service一直在后台运行、Android上开发一个长达几天的倒计时小软件, 把它做成service 还是做成能够保留在后台的Activity、android service有什么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10109102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存