为什么OnReceive多次被称为多次?

发布于 2025-01-29 09:02:44 字数 985 浏览 5 评论 0原文

我正在一眼可以在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


I am running a worker in a glance composable on android.

why is onReceive being continuously called in an infinite loop?

What am I missing here?

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


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零崎曲识 2025-02-05 09:02:44

那是因为当没有计划的工人时,WM正在禁用启动接收器。当Android应用程序禁用接收器时,Android OS发送package_changed广播事件,导致窗口小部件被调用。

https://issuetracker.google.com/115575872长延迟(例如10年)。我们正在努力改善这一点。

That's because WM is disabling the on boot receiver when there are no workers scheduled. When an android app disables a receiver Android OS sends the PACKAGE_CHANGED broadcast event, causing the widget onReceive to be called.

https://issuetracker.google.com/115575872

For now the recommendation is to schedule a work with a long delay (e.g 10 years). We are working on a way to improve this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文