Intentintent=registerReceiver(null,newIntentFilter(Intent.ACTION_BATTERY_CHANGED));查询电量的时候可以通过上面这种方式返回一个intent,从这个intent中也确实能够拿到我们想要要的信息,但是平常我们注册普通的广播的时候都习惯传入一个receiver,如果有电量改变就会不停的执行receiver的onReceive方法。
androidregisterReceiver()方法有什么问题
我的疑问就是1.这两种注册方法有什么不同之处吗?2.如果我频繁的使用传入空receiver的方法进行电量查询会有什么麻烦吗?
registerReceiver()方法的源码
我也去稍微看了下registerReceiver()方法的源码,应该是在ContextImpl类中的
privateIntentregisterReceiverInternal(BroadcastReceiverreceiver,intuserId,
IntentFilterfilter,StringbroadcastPermission,
Handlerscheduler,Contextcontext){
IIntentReceiverrd=null;
if(receiver!=null){
if(mPackageInfo!=null&&context!=null){
if(scheduler==null){
scheduler=mMainThread.getHandler();
}
rd=mPackageInfo.getReceiverDispatcher(
receiver,context,scheduler,
mMainThread.getInstrumentation(),true);
但是作为一个菜鸟还是没能理解这个方法中receiver为null时的区别,希望大神能够稍微讲解下,也请回答下上面的第二个问题,
解决方案
区别是一次有效和持续有效,null的方式只在当时调用时获取信息,之后的变化就接收不到了,因为你没有接收者;
先讨论你的场景需求,理论上频繁调用查询并不会有什么影响,只是你的频繁是有多大频率,有没有实际的意义。
总之,registerReceiver()给大家简单的介绍了一些,希望大家多看看。