我尝试为我的聊天应用程序使用JobSchedulers(用于异步发送消息(:
val job = dispatcher.newJobBuilder()
.setService(BackgroundJobService::class.java)
.setTag(BackgroundJobService.TASKTAG_SEND_MESSAGE)
.setReplaceCurrent(false)
.setConstraints(Constraint.ON_ANY_NETWORK)
.setExtras(bundle)
.setTrigger(Trigger.executionWindow(0, 1))
.build()
dispatcher.mustSchedule(job)
并在清单中添加我的服务:
<service
android:exported="false"
android:name=".data.background.service.BackgroundJobService">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>
</service>
我写了这个JobService,它没有调用onCreate((也没有调用onDestroy((
class BackgroundJobService : JobService() {
companion object {
val TASKTAG_SEND_MESSAGE = "send_message"
}
@Inject
lateinit var webSocket: IRxWebSocket
var subscribe: Disposable? = null
override fun onCreate() {
super.onCreate()
App.appComponent.inject(this)
subscribe = webSocket.connect().subscribe({}, {})
}
override fun onStartJob(job: JobParameters?): Boolean {
return true // Debug point here
}
override fun onStopJob(job: JobParameters?): Boolean {
return true
}
override fun onDestroy() {
super.onDestroy()
subscribe?.dispose()
}
}
但是我的开始工作没有打电话!我的错误在哪里? 我看到消息"谷歌播放服务已停止"。
您的清单声明是错误的:您需要将作业服务声明为需要只有操作系统本身才能使用的特定权限。 从工作服务文档:
必须使用此权限保护作业服务:
<service android:name="MyJobService" android:permission="android.permission.BIND_JOB_SERVICE" >
如果在清单中声明了作业服务,但未受此权限保护,则操作系统将忽略该服务。
我必须捆绑
在一起bundle.putString("TAG", gson.toJson(object))
但不是
bundle.putParcelable("TAG", object)