Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 何时为自定义视图类注册/取消注册广播接收器?_Android_Broadcastreceiver_Android View - Fatal编程技术网

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

Android 何时为自定义视图类注册/取消注册广播接收器?,android,broadcastreceiver,android-view,Android,Broadcastreceiver,Android View,我有一个扩展的自定义类。在那门课上,我想做一些基于广播的事情,所以我注册了一个何时是注册和取消注册自定义视图实现的BroadcastReceiver的最佳时间?对我来说,这似乎不像一项活动那么简单 我现在所做的是覆盖onWindowVisibilityChanged()。在那里,我检查提供的int可见性,如果它是可见的I寄存器。否则,我将取消注册。我现在意识到这是有问题的,因为onWindowVisibilityChanged()这样说 请注意,这会告诉您窗口是否对窗口管理器可见;这不会告诉您您

我有一个扩展的自定义类。在那门课上,我想做一些基于广播的事情,所以我注册了一个何时是注册和取消注册自定义视图实现的BroadcastReceiver的最佳时间?对我来说,这似乎不像一项活动那么简单

我现在所做的是覆盖
onWindowVisibilityChanged()
。在那里,我检查提供的
int可见性
,如果它是
可见的
I寄存器。否则,我将取消注册。我现在意识到这是有问题的,因为
onWindowVisibilityChanged()
这样说

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


如果我的视图不可见,我不希望我的广播接收器接收广播。虽然,我现在知道它可以标记为可见,但是屏幕上的其他东西可能在它前面。因此,这是不可靠的。

您必须让您的自定义视图活动/片段生命周期意识到,即您必须通知它onResume()/onPause()已发生(或分别发生了其他对),并注册/取消注册。我认为没有更好的方法了。

“在那个课程中,我想做一些基于广播的事情,所以我注册了一个广播接收器”——FWIW,我认为这是一个架构缺陷。对我来说,一个自定义的
视图
收听广播就像一个
按钮
读取文件或
编辑文本
通过HTTP与Web服务器通信。通过广播、文件I/O、网络I/O等进行通信不属于视图层,而是属于其他地方(例如,MVC风格体系结构中的控制器)。@Commonware我并不完全同意你的观点。为了更好地解释,视图所做的一件事就是显示某些内容的下载进度。接收广播是为了知道如何增加视图下载的进度条。“接收广播是为了知道如何增加视图下载的进度条”-IMHO,广播本身应由控制器(活动、片段等)处理,然后控制器调用相关
视图上的方法。