面试题答案
一键面试- 注册
BroadcastReceiver
监听设备重启:- 在
AndroidManifest.xml
中注册一个BroadcastReceiver
来监听android.intent.action.BOOT_COMPLETED
广播。
<receiver android:name=".BootReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
- 在
- 创建
BootReceiver
类:- 在
BootReceiver
类中,当接收到设备重启广播时,重新启动WorkManager
的周期性任务。
class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_BOOT_COMPLETED) { val constraints = Constraints.Builder() .setRequiresCharging(false) .setRequiredNetworkType(NetworkType.NOT_REQUIRED) .build() val myWorkRequest = PeriodicWorkRequestBuilder<MyWorker>(15, TimeUnit.MINUTES) .setConstraints(constraints) .build() WorkManager.getInstance(context).enqueue(myWorkRequest) } } }
- 在
- 定义
MyWorker
类:- 这是
WorkManager
执行任务的具体工作类。
class MyWorker(appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams) { override fun doWork(): Result { // 在此处编写具体的任务逻辑 return Result.success() } }
- 这是
- 权限声明:
- 在
AndroidManifest.xml
中添加接收设备重启广播所需的权限:
<uses - permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- 在
涉及到的相关组件及方法:
WorkManager
:用于管理异步任务,通过WorkManager.getInstance(context)
获取实例,enqueue(WorkRequest)
方法用于将任务加入队列执行。PeriodicWorkRequestBuilder
:用于创建周期性任务请求,设置任务执行周期等参数。Constraints
:用于定义任务执行的约束条件,如是否需要充电、网络类型等,通过Constraints.Builder
构建。BroadcastReceiver
:用于接收系统广播,这里用于监听设备重启广播。Intent.ACTION_BOOT_COMPLETED
:系统广播的 action,用于标识设备重启事件。