Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响

📅 发布时间:2026/7/12 14:24:11 👁️ 浏览次数:
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
一、静态注册对广播接收器实例创建的影响1、基本介绍静态注册的广播接收器每次发送广播都会新建一个广播接收器实例2、演示1ReceiverTestReceiver.javapublicclassTestReceiverextendsBroadcastReceiver{publicstaticfinalStringTAGTestReceiver.class.getSimpleName();OverridepublicvoidonReceive(Contextcontext,Intentintent){Log.i(TAG,收到内容 - this);}}AndroidManifest.xmlreceiverandroid:name.mybroadcast.TestReceiverandroid:exportedfalse/2Activityactivity_main.xml?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityButtonandroid:idid/btn_sendandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text发送广播app:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent//androidx.constraintlayout.widget.ConstraintLayoutMainActivity.javapublicclassMainActivityextendsAppCompatActivity{publicstaticfinalStringTAGMainActivity.class.getSimpleName();OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButtonbtnSendfindViewById(R.id.btn_send);btnSend.setOnClickListener(v-{IntentintentnewIntent();ComponentNamecomponentnewComponentName(this,TestReceiver.class);intent.setComponent(component);sendBroadcast(intent);});}}3Test第 1 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver1a66a22第 2 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver58d710f二、动态注册对广播接收器实例创建的影响1、基本介绍动态注册的广播接收器每次发送广播只有一个广播接收器实例2、演示1ReceiverpublicclassTestReceiverextendsBroadcastReceiver{publicstaticfinalStringTAGTestReceiver.class.getSimpleName();publicstaticfinalStringACTIONTAG;OverridepublicvoidonReceive(Contextcontext,Intentintent){Log.i(TAG,收到内容 - this);}}2Activityactivity_main.xml?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityButtonandroid:idid/btn_sendandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text发送广播app:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent//androidx.constraintlayout.widget.ConstraintLayoutMainActivity.javapublicclassMainActivityextendsAppCompatActivity{publicstaticfinalStringTAGMainActivity.class.getSimpleName();OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TestReceiverreceivernewTestReceiver();IntentFilterintentFilternewIntentFilter(TestReceiver.ACTION);registerReceiver(receiver,intentFilter);ButtonbtnSendfindViewById(R.id.btn_send);btnSend.setOnClickListener(v-{IntentintentnewIntent();intent.setAction(TestReceiver.ACTION);sendBroadcast(intent);});}}3Test第 1 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver6458b62第 2 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver6458b62三、在 Application 中动态注册1、基本介绍在 Application 的 onCreate 方法中采用动态注册来注册广播接收器只会创建一个广播接收器实例2、演示1ReceiverpublicclassTestReceiverextendsBroadcastReceiver{publicstaticfinalStringTAGTestReceiver.class.getSimpleName();publicstaticfinalStringACTIONTAG;OverridepublicvoidonReceive(Contextcontext,Intentintent){Log.i(TAG,收到内容 - this);}}2ApplicationMyApplication.javapublicclassMyApplicationextendsApplication{privateTestReceivertestReceiver;OverridepublicvoidonCreate(){super.onCreate();testReceivernewTestReceiver();IntentFilterfilternewIntentFilter(TestReceiver.ACTION);registerReceiver(testReceiver,filter);}}3Activityactivity_main.xml?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityButtonandroid:idid/btn_sendandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text发送广播app:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent//androidx.constraintlayout.widget.ConstraintLayoutMainActivity.javapublicclassMainActivityextendsAppCompatActivity{publicstaticfinalStringTAGMainActivity.class.getSimpleName();OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButtonbtnSendfindViewById(R.id.btn_send);btnSend.setOnClickListener(v-{IntentintentnewIntent();intent.setAction(TestReceiver.ACTION);sendBroadcast(intent);});}}4Test第 1 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver332c7bc第 2 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver332c7bc四、在 Activity 中动态注册1、基本介绍如果在 Activity 中采用动态注册来注册广播接收器需要在合适的时机注销广播接收器否则会创建多个广播接收器实例如果存在多个广播接收器实例它们会同时接收广播2、多个广播接收器实例1ReceiverpublicclassTestReceiverextendsBroadcastReceiver{publicstaticfinalStringTAGTestReceiver.class.getSimpleName();publicstaticfinalStringACTIONTAG;OverridepublicvoidonReceive(Contextcontext,Intentintent){Log.i(TAG,收到内容 - this);}}2Activityactivity_main.xml?xml version1.0 encodingutf-8?androidx.constraintlayout.widget.ConstraintLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:apphttp://schemas.android.com/apk/res-autoxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivityButtonandroid:idid/btn_sendandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text发送广播app:layout_constraintBottom_toBottomOfparentapp:layout_constraintEnd_toEndOfparentapp:layout_constraintStart_toStartOfparentapp:layout_constraintTop_toTopOfparent//androidx.constraintlayout.widget.ConstraintLayoutMainActivity.javapublicclassMainActivityextendsAppCompatActivity{publicstaticfinalStringTAGMainActivity.class.getSimpleName();OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);registerReceiver(newTestReceiver(),newIntentFilter(TestReceiver.ACTION));registerReceiver(newTestReceiver(),newIntentFilter(TestReceiver.ACTION));ButtonbtnSendfindViewById(R.id.btn_send);btnSend.setOnClickListener(v-{IntentintentnewIntent();intent.setAction(TestReceiver.ACTION);sendBroadcast(intent);});}}3Test第 1 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver6458b62 收到内容 - com.my.broadcast.mybroadcast.TestReceiverbe064f3第 2 次点击按钮发送广播输出结果如下收到内容 - com.my.broadcast.mybroadcast.TestReceiver6458b62 收到内容 - com.my.broadcast.mybroadcast.TestReceiverbe064f3