public class KeepAliveService extends JobService {

    private static final String TAG = "KeepAliveService";

    private static final long INTERVAL_MILLIS = 60_000;


    private HandlerThread mHandlerThread;
    private Handler mHandler;

    @Override
    public void onCreate() {
        super.onCreate();
        mHandlerThread = new HandlerThread("KeepAliveThread");
        mHandlerThread.start();
        mHandler = new JobHandler(mHandlerThread.getLooper());

    }


    public static void startJobScheduler(Context context) {
        JobScheduler jobScheduler = (JobScheduler) context.getApplicationContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
        if (jobScheduler != null) {
            jobScheduler.schedule(new JobInfo.Builder(JobId.KEEP_ALIVE,
                    new ComponentName(context.getApplicationContext().getPackageName(), KeepAliveService.class.getName()))
                    .setPeriodic(INTERVAL_MILLIS)
                    .build());
        }
    }


    @Override
    public boolean onStartJob(JobParameters params) {
        mHandler.sendMessage(mHandler.obtainMessage(params.getJobId(), params));
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }


    static class JobHandler extends Handler {

        public JobHandler(@NonNull Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(@NonNull Message msg) {
            switch (msg.what) {
                case JobId.KEEP_ALIVE:
                    Context context = MainApp.getContext();
                    if (!isSafetyAppRunning(context)) {
                        startSelf(context);
                    }
                    break;
            }
        }
    }
    // use in api21
	static boolean isSafetyAppRunning(Context context) {
        ActivityManager am = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> tasks = null;
        if (am != null) {
            tasks = am.getRunningAppProcesses();
        }
        String pkgName = null;
        if (null != tasks && tasks.size() > 0) {
            pkgName = tasks.get(0).processName;
        }
        return context.getPackageName().equals(pkgName);

    }

    interface JobId {
        int KEEP_ALIVE = 1;
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        mHandlerThread.quit();
    }


}
 <service
     android:name=".service.KeepAliveService"
     android:exported="true"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:process=":watch" />