Android-浅谈广播机制,实现强制下线功能(上)

简介: 为了便于进行系统级别的消息通知,Android也有自己的一套类似的广播消息机制。

首先,复习一下,什么是广播呢?

顾名思义,广播就像我们上学的时候每个班级里的喇叭一样,这些喇叭都是接入到学校的总的一个地方,比如说广播室啊什么的。一旦有什么通知,就会播放一条让全校师生都知道的广播。类似的工作机制其实很多,比如就像计算机的网络通信。

为了便于进行系统级别的消息通知,Android也有自己的一套类似的广播消息机制。

在Android中,每个应用都可以对自己感兴趣的广播进行注册,这样程序就只会收到自己所关注的广播,这些内容可能来自于系统,也有可能来自于别的app。Android也有一套完整的api,允许应用自由的发送和接收广播,发送广播所采用的就是Intent,而接收广播所采用的就是广播接收器。(Broadcast Receiver)

广播的类型分为 标准广播有序广播

标准广播:

是一种完全异步执行的广播,在广播发出之后,所有的广播接收器都会在同一时间接收到这条广播消息,因此他们之间没有任何先后顺序可言。这种广播的效率会比较高,但同时也意味着它是无法被截断的。

2345_image_file_copy_8.jpg

有序广播:

是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条广播消息,当这个广播接收器中的逻辑执行完毕之后,广播才会继续传递。所以此时的广播接收器是有前后顺序的。优先级别高的广播接收器就可以先接收到广播消息,并且前面的广播接收器还可以截断正在传递的广播,这样后面的广播接收器就无法接收到广播消息了。

2345_image_file_copy_9.jpg

这里你可能会疑问了,说了这么多,那怎么创建一个广播接收器呢?

其实只需要创建一个类,让他继承Broadcast-Receiver,并重写onReceive()方法即可。当有广播到来时,onReceive方法就会执行。具体的逻辑就可以在这个方法中处理。


本文通过一个强制下线的例子来简单说明广播的使用。

 

强制下线很多程序都具备这个功能,比如QQ号再别处登陆了,就会将你强制挤下线。强制下线的功能思路也比较简单,只需要在界面上弹出一个地画框,让用户无法进行其他操作,必须要点击对话中的确定按钮,然后回到登录界面即可。借助于广播,我们就可以轻松实现这个功能。而不必在每个页面都编写一个弹出对话框的逻辑,因为你不知道用户此时在哪里。

强制下线的功能需要关闭所有活动,然后回到登录界面。关于这个方法,我们先简单说一下:

我们只需要创建一个专门的集合类对所有的活动进行管理就可以了,下面我们就来实现以下。

首先,新建一个ActivityCollector类作为活动管理器,代码如下。

public class ActivityCollector {
    public static List<Activity> activities=new ArrayList<>();
    public static void addActivity(Activity activity){
            activities.add(activity);           //移除活动
    }
    public static void removeActivity(Activity activity){
            activities.remove(activity);
    }
    public static void finish(){
        for(Activity activity:activities){
            if (!activity.isFinishing()){
                activity.finish();
            }
        }
            activities.clear();
    }
}

在活动管理器中,我们通过一个List来暂存活动,然后提供了一个 addActivity() 方法用于向 List 中添加一个活动,提供了一个 removeActivity() 方法用于从 List 中移除活动,最后提供了一个 finish() 方法用于将 List 中存储的活动全部销毁掉。

然后创建BaseActity类作为所有活动的父类,代码如下

public class BaseActivity extends AppCompatActivity {
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCollector.addActivity(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);     //取消广播
    }
}

接着,创建一个登录界面的活动,新建LoginActivity,并让Android stdio自动帮我们生成相应的布局文件。然后编辑布局文件 activity_login.xml,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <TextView
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textSize="18sp"
            android:text="Account"/>
        <EditText
            android:id="@+id/account"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <TextView
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textSize="18sp"
            android:text="password"/>
        <EditText
            android:id="@+id/password"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:inputType="textPassword"/>
    </LinearLayout>
    <Button
        android:id="@+id/login"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text="Login"/>
</LinearLayout>

2345_image_file_copy_10.jpg

这里我们使用LinearLayout编写出了一个登录布局,布局的样式这里不难理解吧。

目录
相关文章
|
5天前
|
Android开发
Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
Android SystemUI去掉拖动亮度条QSPanel界面隐藏功能
9 0
|
6天前
|
Android开发
Android Loader机制
Android Loader机制
12 1
|
20天前
|
Java Android开发
Android Mediatek 应用层重置USB设备功能
Android Mediatek 应用层重置USB设备功能
13 0
|
20天前
|
Linux Android开发
Android 内核关闭CAN 串口设备回显功能
Android 内核关闭CAN 串口设备回显功能
9 0
|
28天前
|
机器学习/深度学习 人工智能 TensorFlow
安卓中的人工智能:集成机器学习功能
【4月更文挑战第14天】在数字化时代,人工智能与机器学习正驱动安卓平台的技术革新。谷歌的ML Kit和TensorFlow Lite为开发者提供了便捷的集成工具,使得应用能实现图像识别、文本转换等功能,提升用户体验。尽管面临数据隐私和安全性的挑战,但随着技术进步,更强大的AI功能将预示着移动端的未来,为开发者创造更多创新机遇。
|
1月前
|
Android开发
Android实现拨打电话功能
Android实现拨打电话功能
31 0
|
1月前
|
人工智能 测试技术 Android开发
Android实现点击链接跳转功能
Android实现点击链接跳转功能
21 1
|
1月前
|
存储 数据库 Android开发
Android实现手机内存存储功能
Android实现手机内存存储功能
27 2
|
10天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。