我正在做应该安全的应用程序。这意味着它应该重新开始,即使出现了问题并且发生了崩溃。
实现这一点我做了以下事情:
我有工作服务MyIntentService
,它开始工作线程并完成工作。
另外,我安排JobService
来检查工作线程是否还活着。如果不是 - JobService
将Intent
发送给正在运行的服务。
除了一件事之外,一切都很完美:工作线程崩溃和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()");
}
}
答案 0 :(得分:1)
调用工作服务的onCreate(),并立即调用onDestroy()。
它始终如此。那是因为你选择扩展IntentService
。 IntentService
的生命时间足以让onHandleIntent()
完成其工作。之后,如果还没有待处理的工作,IntentService
调用stopSelf()
并且服务将被销毁。
如何更改情况以使重启后的工作服务正常工作?
扩展Service
而非IntentService
,将代码从onHandleIntent()
移至onStartCommand()
。