美文网首页
Android广播机制之标准广播(Normal broadcas

Android广播机制之标准广播(Normal broadcas

作者: 浅_若清风 | 来源:发表于2021-06-01 12:18 被阅读0次

    Android中的广播主要分为两种类型:标准广播和有序广播。

    定义:

    标准广播(Normal broadcasts)是一种完全异步执行的广播,在广播发出后,所有的广播接收器几乎都会同一时刻接收到该条广播信息,所以它们之间是无序的。标准广播的效率高,不易被截断。

    工作流程示意图
    img_1.png
    案例:

    在发送广播之前,我们需要定义一个广播接收器(Broadcast Receiver)来接收广播。在这里我们创建一个继承于BroadcastReceiver的类MyBroadcastReceiver。在onReceive()处理你接收到的广播内容,在这里我用logd打印获取到值

    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            Log.d("MyBroadcastReceiver", "onReceive: "+ intent.getStringExtra("myName"));
        }
    }
    

    我们知道,Android广播接收器有两种注册方式。我们可以用以下任意一种来进行注册。

    静态注册

    在AndroidManifest.xml文件了,在<receiver>标签里添加<intent-filter></intent-filter>代码

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        ...>
        <application ...>
            <receiver...>
                <intent-filter>
                    <action android:name="broadcast"/>
                </intent-filter>
            </receiver>
            <activity android:name=".MainActivity">
                ...
            </activity>
        </application>
    </manifest>
    

    其中,broadcast为自定义的广播名称。

    动态注册

    在需要接收界面进行注册,代码如下

    public class MainActivity extends AppCompatActivity {
        MyBroadcastReceiver receiver;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            receiver = new MyBroadcastReceiver();
            IntentFilter intentFilter = new IntentFilter("broadcast");
            registerReceiver(receiver,intentFilter);
           //Send
            Button button = findViewById(R.id.send_button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.setAction("broadcast");
                    intent.putExtra("myName","浅_若清风");
                    sendBroadcast(intent);
                }
            });
        }
       @Override
        protected void onDestroy(){
            super.onDestroy();
            unregisterReceiver(receiver);
        }
    }
    

    首先我们需要分别创建MyBroadcastReceiver的实例和IntentFilter的实例,并给IntentFilter的实例添加一个action:broadcast(接收的广播的名称),然后调用registerReceiver()方法进行注册,并将MyBroadcastReceiver的实例和IntentFilter的实例都传进去。

    广播发送

    在上面的代码中,我们看到声明了Button方法,所以我们需要在对应的activity_main.xml文件里新增按钮代码

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <Button
            android:id="@+id/send_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Send Button"
            />
    </LinearLayout>
    
    注销

    当然,我们最后一定不要忘了取消注册。我们可以通过调用unregisterReceiver()方法来实现。
    Intent是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由 Intent来协助完成 Android各个组件之间的通讯。我们可以用putExtra属性传入多个参数。至此,Android的标准广播发送就完成了。编译运行工程,点击Send Button按钮,我们可以在Logcat里打印出我们期待的值了。

    相关文章

      网友评论

          本文标题:Android广播机制之标准广播(Normal broadcas

          本文链接:https://www.haomeiwen.com/subject/zhwbsltx.html