我的任务是在互联网可用时每10小时运行一次后台任务。
对于这个使用流行的evernote github lib:android-job。 我的代码:
应用程序类:
public class MyApplication extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
JobManager.create(this).addJobCreator(new BackupJobCreator());
BackupJob.Companion.schedule();
}
}
工作创建者类:
class BackupJobCreator : JobCreator {
override fun create(tag: String): Job? {
return when (tag) {
BackupJob.BACKUP_TAG -> {
BackupJob()
}
else -> null
}
}
}
我的工作班:
class BackupJob : Job() {
@Inject
lateinit var backupRepo: BackupRepository
private var backupDispose = Disposables.empty()
private val dataFormat = SimpleDateFormat("dd MM yy hh:mm", Locale.US)
private val tag = BackupJob::class.java.name.replace("com.jellyworkz.udark.backup.source.BackupRepository.", "3zgroup ")
init {
Log.i(tag, "init backup job")
MyApplication.getInstance().plusBackupComponent().inject(this)
}
companion object {
const val BACKUP_TAG = "backupJob"
fun schedule(): Int {
return JobRequest
.Builder(BACKUP_TAG)
.setPeriodic(TimeUnit.HOURS.toMillis(BACKUP_PERIOD_HOURS))
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.build()
.schedule()
}
}
override fun onRunJob(params: Params): Result {
backupDispose.dispose()
backupDispose = backupRepo.backup()
.compose(RxUtils.ioToMainTransformer())
.doOnComplete {
Log.i(tag, "ended backup job on ${dataFormat.format(Date(Calendar.getInstance().timeInMillis))}")
}
.subscribe({
MyApplication.getInstance().clearPurchaseComponent()
}, {
it.message?.let { error ->
Log.e(tag, error)
}
})
return Result.SUCCESS
}
}
所以有一些问题:
首先:每次我的应用程序打开时服务都会启动,但只需要10小时后才能启动。
第二:经过一段时间(1个月)可怕的事情发生了。我的应用程序每秒开始崩溃:致命异常:java.lang.RuntimeException
无法创建应用程序com.serg.app.MyApplication:
java.lang.IllegalStateException:应用程序的调度可能不超过100 不同的工作
请在我出错的地方帮忙吗?