Android service not restarting in lollipop

前端 未结 7 1355
借酒劲吻你
借酒劲吻你 2020-12-11 01:13

In my application, I use location based service in background. So I need to restart my service when it gets destroyed.

But I got this message in logcat

7条回答
  •  被撕碎了的回忆
    2020-12-11 02:01

    Finally I achieved with help of Evernote JobService

    Github link - https://github.com/evernote/android-job

    Step 1: Add evernote jobservice dependency

    implementation 'com.evernote:android-job:1.3.0-alpha03'
    

    Step 2: Create DemoJobCreator.java class

    public class DemoJobCreator implements JobCreator {
    
    @Override
    @Nullable
    public Job create(@NonNull String tag) {
        switch (tag) {
            case DemoSyncJob.TAG:
                return new DemoSyncJob();
            default:
                return null;
        }
    }
    }
    

    Step 3: Create DemoSyncJob.java class

    public class DemoSyncJob extends Job {
    
    public static final String TAG = ">>>> job_demo_tag";
    
    @Override
    @NonNull
    protected Result onRunJob(Params params) {
        // run your job here
        Log.d(TAG, "onRunJob: ");
        if(!isMyServiceRunning(this.getContext(), TestService.class)){
            Intent intent=new Intent(context,TestService.class);
            context.startService(intent);
        }
        scheduleJob();
        return Job.Result.SUCCESS;
    }
    
    public static void scheduleJob() {
        new JobRequest.Builder(DemoSyncJob.TAG)
                .setExecutionWindow(2_000L, 2_000L)
                //.setPeriodic(900000) -> recommended. but it will work after 15 min (if you used this no need scheduleJob(); inside onRunJob();)
                .build()
                .schedule();
     }
    
     public static boolean isMyServiceRunning(Context context, Class serviceClass) {
        try {
            ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
                if (serviceClass.getName().equals(service.service.getClassName())) {
                    return true;
                }
            }
        }catch (Exception e){
            Log.e(TAG, "isMyServiceRunning: ",e );
        }
        return false;
      }
      }
    

    Step 4: In your Application file (If not available create it) add following line in onCreate()

     JobManager.create(this).addJobCreator(new DemoJobCreator());
    

    Step 5: Finally start JobService in your Activity

    DemoSyncJob.scheduleJob();
    

    This JobService will check service running or not (every 2 second) If service not running it will restart the service.

    Disclaimer : This may be not right solution. But it will 100% working.

    I hope it helps atleast anyone in future.

提交回复
热议问题