android - registerReceiver()方法传入的receiver为null时的具体实现?
迷茫
迷茫 2017-04-18 09:13:16
0
1
594
Intent intent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

查询电量的时候可以通过上面这种方式返回一个intent,从这个intent中也确实能够拿到我们想要要的信息,但是平常我们注册普通的广播的时候都习惯传入一个receiver,如果有电量改变就会不停的执行receiver的onReceive方法,我的疑问就是1.这两种注册方法有什么不同之处吗?2.如果我频繁的使用传入空receiver的方法进行电量查询会有什么麻烦吗?

------------------分割线-------------------------------

我也去稍微看了下registerReceiver()方法的源码,应该是在ContextImpl类中的

       

   private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,
            IntentFilter filter, String broadcastPermission,
            Handler scheduler, Context context) {
        IIntentReceiver rd = null;
        if (receiver != null) {
            if (mPackageInfo != null && context != null) {
                if (scheduler == null) {
                    scheduler = mMainThread.getHandler();
                }
                rd = mPackageInfo.getReceiverDispatcher(
                    receiver, context, scheduler,
                    mMainThread.getInstrumentation(), true);
            } else {
                if (scheduler == null) {
                    scheduler = mMainThread.getHandler();
                }
                rd = new LoadedApk.ReceiverDispatcher(
                        receiver, context, scheduler, null, true).getIIntentReceiver();
            }
        }
        try {
            return ActivityManagerNative.getDefault().registerReceiver(
                    mMainThread.getApplicationThread(), mBasePackageName,
                    rd, filter, broadcastPermission, userId);
        } catch (RemoteException e) {
            return null;
        }
    }

但是作为一个菜鸟还是没能理解这个方法中receiver为null时的区别,希望大神能够稍微讲解下,也请回答下上面的第二个问题,

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

Antworte allen(1)
洪涛
  1. 区别是一次有效和持续有效,null的方式只在当时调用时获取信息,之后的变化就接收不到了,因为你没有接收者;

  2. 先讨论你的场景需求,理论上频繁调用查询并不会有什么影响,只是你的频繁是有多大频率,有没有实际的意义。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!