[英]Send data from broadcast receiver to fragment
我有一个广播接收器,只要系统中的下载完成,它就会被触发。 我想做的就是将此接收器的结果发送到我更新视图的片段。 目前,我使用这种方法。
public class DownloadCompleteReceiver extends BroadcastReceiver {
public interface DownloadListener {
public void downloadCompleted(int appId);
}
private static List<DownloadListener> downloadListeners = new LinkedList<>();
public static void registerDownloadListener(DownloadListener downloadListener){
downloadListeners.add(downloadListener);
}
public static void unregisterDownloadListener(DownloadListener downloadListener){
downloadListeners.remove(downloadListener);
}
@Override
public void onReceive(Context context, Intent intent) {
//whatever calculation needed to be done.
for(DownloadListener listener: downloadListeners)
if(listener != null)
listener.downloadCompleted(appId);
}
}
在我的片段onStart方法中,我这样做。
DownloadCompleteReceiver.registerDownloadListener(this);
并在onStop方法中
DownloadCompleteReceiver.unregisterDownloadListener(this);
然后我实现了接口,我得到了结果! 这是一个简单的解决方案,效果很好。 我想知道我的代码有问题吗? 我想念什么吗? 我花了数小时搜寻此事,但没有人使用这种方法! 有什么原因吗?
顺便说一句,我需要在单独的类中定义我的接收器,因为即使我的应用程序关闭了,我也希望将其解雇,所以在这里无法对接收器进行内部分类。
我没有发现这种方法有什么问题,我在项目中使用了相同的方法。
如果您询问是否有其他替代方法,可以查看基于事件的库以进行异步通信:
还存在将基于事件的框架与Android的LocalBroadcast进行比较的问题: Otto与LocalBroadcast:
这种方法没有错。
首先,您的接收者在onStart方法中注册,而在onStop方法中未注册。
因此,如果您的活动正在运行(我的意思是没有停止),并且您删除或替换了片段,那么您将永远无法注销接收者。
因此,如果仅将此侦听器用于此片段,则应在片段的onAttach和onDetach中注册和注销接收者。
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.