为什么我的工作没有开始?

时间:2017-07-24 16:12:56

标签: android kotlin android-jobscheduler firebase-job-dispatcher

我尝试将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()
        }
    }

但我的onStartJob没有打电话!我的错误在哪里? 我看到的消息“Google Play服务已停止”。

2 个答案:

答案 0 :(得分:0)

我必须与

捆绑在一起
bundle.putString("TAG", gson.toJson(object))

但不是

bundle.putParcelable("TAG", object)

答案 1 :(得分:0)

您的清单声明错误:您需要将作业服务声明为需要只有操作系统本身才能使用的特定权限。来自the JobService documentation

  

必须使用此权限保护作业服务:

     
    

<service android:name="MyJobService" android:permission="android.permission.BIND_JOB_SERVICE" >

  
     

如果在清单中声明了作业服务但未使用此权限进行保护,则操作系统将忽略该服务。