JobService启动的IntentSevice会立即销毁。我怎么能阻止这个?

时间:2017-08-22 15:10:31

标签: android service

我正在做应该安全的应用程序。这意味着它应该重新开始,即使出现了问题并且发生了崩溃。

实现这一点我做了以下事情:

我有工作服务MyIntentService,它开始工作线程并完成工作。

另外,我安排JobService来检查工作线程是否还活着。如果不是 - JobServiceIntent发送给正在运行的服务。

除了一件事之外,一切都很完美:工作线程崩溃和JobService调用startService()onCreate()工作服务 被调用,并且立即调用onDestroy()。即使我提出Notification并致电startForeground()进行工作服务。

如何更改情况以使重启后的工作服务正常工作?

这是我的日程安排程序

public class CheckAliveJService extends JobService {

    private static final String TAG = CheckAliveJService.class.getSimpleName();
    private static final int JOB_SCHEDULE_ID = 1;

    public CheckAliveJService() {
    }

    @Override
    public boolean onStartJob(JobParameters jobParameters) {

        Log.i(TAG, "onStartJob()");


        startService(new Intent(this, TransactionService.class)
                            .setAction(TransactionService.ACTION_WAKEUP));

        jobFinished(jobParameters, true);
        return false;
    }

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

    public static void scheduleService(Context context, long millisecPeriod){

        Log.i(TAG, "scheduleService()");

        if(millisecPeriod <= 0){
            return;
        }

        JobInfo.Builder builder =
                new JobInfo.Builder(JOB_SCHEDULE_ID,
                    new ComponentName(context, CheckAliveJService.class))
                    .setPeriodic(millisecPeriod)
                    .setPersisted(true);

        JobScheduler tm = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        tm.schedule(builder.build());
    }

    public static void unscheduleService(Context context){
        Log.i(TAG, "unscheduleService()");

        JobScheduler tm = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        tm.cancel(JOB_SCHEDULE_ID);

    }
}

这是工作服务

public class MyIntentService extends IntentService {

    private static final String TAG = MyIntentService.class.getSimpleName();


 @Override
    protected void onHandleIntent(Intent intent) {

        Intent notificationIntent = new Intent(this, MyIntentService.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

        builder.setContentTitle("setContentTitle")
                .setContentText("let's dance")
                .setSmallIcon(android.R.drawable.stat_sys_download)
                .setContentIntent(pendingIntent)
                .setTicker("setTicker");

        startForeground(2208, builder.build());

        if (System.currentTimeMillis() - mLastThreadCall >= WAKEUP_TIMEOUT) {
            startWorkingThread();
        }       
    }

    @Override
        public void onCreate() {

        super.onCreate();
        Log.d(TAG, "onCreate");
    }       

    @Override
    public void onDestroy() {
        Log.i(TAG, "onDestroy()");  
    }
}

1 个答案:

答案 0 :(得分:1)

  调用

工作服务的onCreate(),并立即调用onDestroy()。

它始终如此。那是因为你选择扩展IntentServiceIntentService的生命时间足以让onHandleIntent()完成其工作。之后,如果还没有待处理的工作,IntentService调用stopSelf()并且服务将被销毁。

  

如何更改情况以使重启后的工作服务正常工作?

扩展Service而非IntentService,将代码从onHandleIntent()移至onStartCommand()