美文网首页android旅程
保活 (一)- Job Service ,JobSchedule

保活 (一)- Job Service ,JobSchedule

作者: 火星局 | 来源:发表于2018-05-29 16:26 被阅读0次

直接上代码

@SuppressLint("NewApi")
public class JobHandlerService extends JobService {
    private JobScheduler mJobScheduler;

    @SuppressLint("WrongConstant")
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Logger.e("JobHandlerService  onStartCommand");

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
            JobInfo.Builder builder = new JobInfo.Builder(startId++,
                    new ComponentName(getPackageName(), JobHandlerService.class.getName()));

            builder.setPeriodic((1000 * 60 * 2));//设置间隔时间

            builder.setRequiresCharging(true);// 设置是否充电的条件,默认false

            builder.setRequiresDeviceIdle(true);// 设置手机是否空闲的条件,默认false

            builder.setPersisted(true);//设备重启之后你的任务是否还要继续执行

            if (mJobScheduler.schedule(builder.build()) <= 0) {
                Logger.e("JobHandlerService  工作失败");
            } else {
                Logger.e("JobHandlerService  工作成功");
            }
        }
        return START_STICKY;
    }


    @Override
    public boolean onStartJob(JobParameters params) {
        Logger.e("JobHandlerService  服务启动");
        if (!isServiceRunning("com.amap.api.location.APSService")) {
            init_Aps();
        }
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        if (!isServiceRunning("com.amap.api.location.APSService")) {
            init_Aps();
        }
        return false;
    }

    private void init_Aps() {
        LocationUtil.newInstance().open(); // 定位 服务类
    }

    // 服务是否运行
    public boolean isServiceRunning(String serviceName) {
        boolean isRunning = false;
        ActivityManager am = (ActivityManager) this
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> lists = am.getRunningAppProcesses();
        // 获取运行服务再启动
        for (ActivityManager.RunningAppProcessInfo info : lists) {
            System.out.println(info.processName);
            if (info.processName.equals(serviceName)) {
                isRunning = true;
            }
        }
        return isRunning;
    }
}

清单文件

 <service
            android:name="com.xxxx.xxxx.service.JobHandlerService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE">
            <intent-filter>
                <action android:name="com.onesignal.NotificationExtender" />
            </intent-filter>
        </service>

为了提高app的保活可能性,项目中使用1px像素Activity前台服务播放无声音乐等方法。
手机设置:进程加锁,自启动,允许后台运行,部分机型有解冻app设置。

Job Service 具体原理分析,参考:

https://www.jianshu.com/p/8f9090e12015

相关文章

  • 保活 (一)- Job Service ,JobSchedule

    直接上代码 清单文件 为了提高app的保活可能性,项目中使用1px像素Activity ,前台服务,播放无声音乐等...

  • 服务保活那些事(Job Service ,JobSchedule

    Android5.0以上保活 Android5.0之后,很多都是可以被APP杀死,尤其是某机型做服务保活更难。An...

  • service保活

    service保活 在实际开发中,我们会遇到一些要求后台运行的service,但是现在Android手机型号太多,...

  • service保活

    简介: 在Android Services (后台服务) 里面,我们了解了Android四大组件之一的Servic...

  • Service保活

    1. onStartCommand方式中,返回START_STICKY 调用Context.startServi...

  • Service保活

    减少被杀的可能性 提升Service的优先级 在intent-filter中设置android:priority=...

  • Android O Notification Channel 的

    Android O 不让后台起service, 要么改成JobSchedule,要么改成foreground se...

  • Android-Service的保活方法

    支持原文:http://tryenough.com/android-service-life 保活Service可...

  • Service

    Service的生命周期? Service的两种启动方式及其区别? 如何对Service进行保活?

  • Android:Service保活

    1: 开启一个像素的Activity系统一般是不会杀死前台进程的。所以要使得进程常驻,我们只需要在锁屏的时候在本...

网友评论

    本文标题:保活 (一)- Job Service ,JobSchedule

    本文链接:https://www.haomeiwen.com/subject/npsajftx.html