现在的位置: 首页 > web前端 > 正文

android registerReceiver()方法

2020年07月15日 web前端 ⁄ 共 1018字 ⁄ 字号 评论关闭

  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()给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.