Activity
class Main : Activity() {
companion object {
private const val TAG = "Main"
private const val JOB_ID = 0
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(TAG, "onCreate: ")
val jobScheduler = getSystemService(JobScheduler::class.java)
if (jobScheduler.getPendingJob(JOB_ID) == null) {
jobScheduler.schedule(JobInfo.Builder(JOB_ID, ComponentName(this, MyJobService::class.java)).apply {
setOverrideDeadline(0)
}.build())
}
}
}
JobService
class MyJobService: JobService() {
companion object {
private const val TAG = "MyJobService"
}
override fun onStartJob(params: JobParameters?): Boolean {
Log.d(TAG, "onStartJob: ")
return true
}
override fun onStopJob(params: JobParameters?): Boolean {
Log.d(TAG, "onStopJob: ")
return true
}
override fun onCreate() {
super.onCreate()
Log.d(TAG, "onCreate: ")
val handler = Handler(HandlerThread("MyJobService").apply { start() }.looper) {
Log.d(TAG, "handleMessage: ")
it.target.sendEmptyMessageDelayed(1, 500)
true
}
handler.sendEmptyMessage(1)
}
override fun onUnbind(intent: Intent?): Boolean {
Log.d(TAG, "onUnbind: ")
return super.onUnbind(intent)
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroy: ")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d(TAG, "onStartCommand: ")
return super.onStartCommand(intent, flags, startId)
}
}
AndroidManifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".test.jobservice.Main">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name=".test.jobservice.MyJobService"
android:permission="android.permission.BIND_JOB_SERVICE"/>
</application>
</manifest>
输出LOG
2021-06-22 18:14:53.695 21476-21476/com.example.myapplication D/Main: onCreate:
2021-06-22 18:14:53.740 21476-21476/com.example.myapplication D/DcsSystemManager: onActivityResume: [f1946d1d61194d6eab245cfe580379a9] ComponentInfo{com.example.myapplication/com.example.myapplication.test.jobservice.Main}, referrer = null, reason = LAUNCH_ACTIVITY
2021-06-22 18:14:53.774 21476-21476/com.example.myapplication D/MyJobService: onCreate:
2021-06-22 18:14:53.776 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
2021-06-22 18:14:53.822 21476-21476/com.example.myapplication D/MyJobService: onStartJob:
2021-06-22 18:14:54.276 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
...
2021-06-22 18:24:53.669 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
2021-06-22 18:24:53.824 21476-21476/com.example.myapplication D/MyJobService: onStopJob:
2021-06-22 18:24:53.828 21476-21476/com.example.myapplication D/MyJobService: onUnbind:
2021-06-22 18:24:53.831 21476-21476/com.example.myapplication D/MyJobService: onDestroy:
2021-06-22 18:24:54.170 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
2021-06-22 18:24:54.673 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
2021-06-22 18:24:55.173 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
2021-06-22 18:24:55.675 21476-21504/com.example.myapplication D/MyJobService: handleMessage:
2021-06-22 18:24:56.175 21476-21504/com.example.myapplication D/MyJobService: handleMessage: