【问题标题】:Why is onReceive called multiple times?为什么 onReceive 会被多次调用?
【发布时间】:2022-05-18 08:57:02
【问题描述】:

我正在运行一个可在 android 上组合的工作人员。

为什么 onReceive 在无限循环中被连续调用?

我在这里想念什么?

class MyWidget : GlanceAppWidget() {
    @Composable
    override fun Content() {
        val work = OneTimeWorkRequest.Builder(MyWorker::class.java).build()
        WorkManager.getInstance().enqueue(work)
    }
}


class MyWorker(
    private val context: Context,
    private val workerParameters: WorkerParameters
) : CoroutineWorker(context, workerParameters) {

    override suspend fun doWork(): Result {
        return Result.success()
    }
}

class GlanceReceiver : GlanceAppWidgetReceiver() {

    override val glanceAppWidget: GlanceAppWidget
        get() = MyWidget()

    override fun onReceive(context: Context, intent: Intent) {
        super.onReceive(context, intent)
    }
}

    //Dependencies
    implementation \"androidx.work:work-runtime-ktx:2.7.1\" // WorkManager with Coroutines
    implementation \"androidx.glance:glance-appwidget:1.0.0-alpha03\" //Glance


    标签: android broadcastreceiver android-workmanager android-appwidget glance-appwidget


    【解决方案1】:

    这是因为 WM 在没有安排工作人员时禁用启动接收器。当 android 应用禁用接收器时,Android 操作系统会发送 PACKAGE_CHANGED 广播事件,从而调用小部件 onReceive。

    https://issuetracker.google.com/115575872

    目前的建议是安排长时间延迟(例如 10 年)的工作。我们正在努力改进这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多