本文主要介绍用Android实现服务重启的方法,涉及到Android操作服务组件实现服务重启的功能。有需要的朋友可以参考一下。
本文阐述了Android服务重启的方法。分享给你,供你参考。如下所示:
在做一个APP的时候,我们可能需要一个后台服务一直运行,要用到服务组件。
但是,在下列情况下,该服务可能会被终止:
A.用户手动单击停止。
B.使用第三方软件(如360手机卫士)清理。当然,这样一来,除了系统服务之外的其他流程肯定会被干掉,除非你联系手机厂商。
此时,可能需要重新启动该服务。上网看了很久,提到用Timer和AlarmManager实现间歇发送广播启动服务(收到注册广播后,启动服务)。我意识到之后,发现b案还是不尽如人意。
我在手机上安装了一个卡卡司机助手,发现案例B,杀了之后一段时间后服务自动启动,观察日志打印。
07-12 14:12:15.735:I/HadesLee(1456):Receiver,action=Android . intent . action . user _ PRESENT
我/哈德斯利(1456): KakaService.onCreate.
我/哈德斯利(1456):Kaka service . onstart command,flags=2,startId=1
07-12 14:12:15.755:I/activity manager(218):Start proc com . miui . weather 2 for broadcast com . miui . weather 2/. service . serviceupdateweather:PID=1484 uid=10060 GIDs={ 3003 }
07-12 14:12:15.755:I/HadesLee(1456):nextRemindTime=null
看到这个日志,发现它是在收到Android . intent . action . user _ present的广播后才启动服务的。
Android . intent . action . user _ present对应的手机屏幕解锁使手机一直处于唤醒状态,我们可以通过接收这个广播来重启服务,并保持服务在后台运行。
在AndroidManifest.xml文件中注册广播就可以了,顺便把手机开机时发的广播粘贴一下。
接收方Android:name=' com . agile mobi . Comac . collect . Android . services . userpresentreceiver '
意图过滤器
action Android:name=' Android . intent . action . user _ PRESENT '/
/意图-过滤器
/接收器
receiver Android:name=' com . agile mobi . Comac . collect . Android . services . boot receiver '
意图过滤器
action Android:name=' Android . intent . action . boot _ COMPLETED '/
类别Android:name=' Android . intent . category . home '/
/意图-过滤器
/接收器
公共类UserPresentReceiver扩展BroadcastReceiver {
private static final String TAG=' user present receiver ';
@覆盖
公共void onReceive(上下文语境,意图意图){
//TODO自动生成的方法存根
Log.e(标签,'接收广播');
//做点什么
}
}
希望这篇文章对大家的Android编程有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。