何时为自定义View类注册/取消注册广播接收器?

问题描述 投票:0回答:2

我有一个扩展View的自定义类。在那个课程中,我想基于广播做一些事情,所以我注册了一个BroadcastReceiver什么时候是为自定义 View 实现注册和取消注册 BroadcastReceiver 的最佳时间?对我来说,它似乎不像 Activity 那样简单。

当我现在做的事情是压倒一切的

onWindowVisibilityChanged()
。在那里,我检查提供的
int visibility
,如果是
VISIBLE
,我就注册。不然我就注销了我现在意识到这是有问题的,因为
onWindowVisibilityChanged()
这么说,

请注意,这会告诉您窗口管理器是否可见您的窗口;这并不能告诉您您的窗口是否被屏幕上的其他窗口遮挡,即使它本身是可见的。

如果我的视图不可见,我不希望我的广播接收器接收广播。虽然,我现在知道它可以被标记为

VISIBLE
但屏幕上的其他东西可能在它前面。所以,这并不可靠。

android broadcastreceiver android-view
2个回答
0
投票

您必须使自定义视图 Activity/Fragment 生命周期感知,即您必须通知它 onResume()/onPause() 发生(或分别发生其他对)并注册/取消注册。我想没有更好的办法了


0
投票
private val myReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // Handle the broadcast
    }
}

override fun onAttachedToWindow() {
    super.onAttachedToWindow()
    // Register the receiver
    val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)  // Example filter
    context.registerReceiver(myReceiver, intentFilter)
}

override fun onDetachedFromWindow() {
    super.onDetachedFromWindow()
    // Unregister the receiver to prevent memory leaks
    context.unregisterReceiver(myReceiver)
}
© www.soinside.com 2019 - 2024. All rights reserved.