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有什么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)