/** * 5.x 以上使用 JobService 实现守护进程,这个守护进程要做的工作很简单,就是启动应用的核心进程 * Created by lzan13 on 2017/3/8. */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class VMDaemonJobService extends JobService { private final static String TAG = VMDaemonJobService.class.getSimpleName(); @Override public boolean onStartJob(JobParameters params) { Log.d(TAG, "onStartJob"); // 这里为了掩饰直接启动核心进程,没有做其他判断操作 startService(new Intent(getApplicationContext(), VMCoreService.class)); return false; } @Override public boolean onStopJob(JobParameters params) { Log.d(TAG, "onStopJob"); return false; } } 我们要做的就是在需要的时候调用JobSchedule的schedule来启动任务;剩下的就不需要关心了,JobSchedule会帮我们做好,下边就是我这边实现的启动任务的方法: /** * 5.x以上系统启用 JobScheduler API 进行实现守护进程的唤醒操作 */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) private void startJobScheduler() { int jobId = 1; JobInfo.Builder jobInfo = new JobInfo.Builder(jobId, new ComponentName(this, VMDaemonJobService.class)); jobInfo.setPeriodic(10000); jobInfo.setPersisted(true); JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(jobInfo.build()); }
@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "VMDaemonService->onStartCommand"); /** * 这里返回值是使用系统 Service 的机制自动重新启动,不过这种方式以下两种方式不适用: * 1.Service 第一次被异常杀死后会在5秒内重启,第二次被杀死会在10秒内重启,第三次会在20秒内重启,一旦在短时间内 Service 被杀死达到5次,则系统不再拉起。 * 2.进程被取得 Root 权限的管理工具或系统工具通过 forestop 停止掉,无法重启。 * 3.一些定制化比较高的第三方系统也不适用 */ return START_STICKY; }
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.093750 second(s), 34 queries , Gzip On.