Android开发之局部广播的使用——LocalBroadcast

一直以来都想着写一篇关于四大组件的文章,可是一直懒一直都没去写,今天终于抱起了电脑来敲一篇。这篇文章是关于安卓四大组件之一的广播的使用,网上关于这方面的文章也是相当多,我这里根据我一年多的工作中总结下来使用比较多的东西来说说,核心内容是Android的局部广播,也称本地广播。

一、推荐原因

我们都知道平常使用的Broadcast都属于系统全局广播,也就是发出的广播可以被其它应用程序接收到,并且我们也可以接受来自于其他任何应用程序的广播。这样一来会造成一些问题,一是消耗性能,二是容易引起安全性的问题,比如我们发送的一些携带关键性数据的广播可能被其他应用程序截获,或者其他的应用程序不停地向我们广播接收器中发送各种垃圾广播,所以为了能够简单的解决这方面的问题,Android引入了一套广播本地广播机制,使用该机制发出的广播只能够在本应用内部进行传递,并且广播接收器也只能接收来自本应用发出的广播。

二、使用场景

更新UI,举个简单的例子,我们的App一般都会有用户登录的功能,很多时候有这样的需求,我们在用户登录完成后,有些界面需要根据登录信息作出及时的响应,相应的做出UI上的改变,针对这种情况,我平时用的比较多的就是使用局部广播来实现,在需要作出改变的地方添加广播接受器进行数据接收即可。

三、代码实战

这里使用LocalBroadcastManager这个单例类来进行实现,具体操作代码如下:

首先我们要自定义广播,定义一个action:

 

/**
 * 自定义广播
 */
public static final String LOGIN_ACTION = "com.archie.action.LOGIN_ACTION";

 

然后定义一个发送广播的方法:

 

/**
     * 发送我们的局部广播
     */
    private void sendBroadcast(){
        LocalBroadcastManager.getInstance(this).sendBroadcast(
                new Intent(LOGIN_ACTION)
        );
    }

然后,我们在需要发送广播的地方调用我们的sendBroadcast()方法,这里大家根据自己的具体情况调用该发送即可。

 

好了,发送广播说完了,现在来说说接收广播,这里我们创建一个类让它继承自BroadcastReceiver广播接受器这个类,重写onReceive()方法:

/**
     * 自定义广播接受器,用来处理登录广播
     */
    private class LoginBroadcastReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            //处理我们具体的逻辑,更新UI
        }
    }

有了我们的广播接收器之后呢,我们要去动态的注册我们的广播接收器,这里分别创建了注册和取消注册的两个方法,一般是在onCreate()方法中注册,然后在onDestroy()方法中取消注册,为了防止内存泄漏,具体代码如下:

 

 

//广播接收器
    private LoginBroadcastReceiver mReceiver = new LoginBroadcastReceiver();

    //注册广播方法
    private void registerLoginBroadcast(){
        IntentFilter intentFilter = new IntentFilter(LoginActivity.LOGIN_ACTION);
        LocalBroadcastManager.getInstance(mContext).registerReceiver(mReceiver,intentFilter);
    }

    //取消注册
    private void unRegisterLoginBroadcast(){
        LocalBroadcastManager.getInstance(mContext).unregisterReceiver(mReceiver);
    }

好了,到这里就完成了我们本地广播的使用。写的仓促,有不对的地方欢迎批评指正,谢谢各位亲!

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android应用开发过程中,有时候我们需要实现全屏滚动的效果,或者在滚动页面中嵌入ListView等组件。下面就来介绍一下如何实现这些效果。 一、全屏滚动 实现全屏滚动需要用到Android系统提供的ScrollView组件。ScrollView可以包含多个子视图,并且可以在垂直方向上进行滚动。下面是一个简单的例子: ``` <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第一行"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第二行"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第三行"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第四行"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第五行"/> </LinearLayout> </ScrollView> ``` 上面的代码中,我们将ScrollView作为根布局,然后在ScrollView内部添加了一个垂直方向的LinearLayout,这个LinearLayout包含了多个TextView,每个TextView显示一行文本。运行这个应用,可以看到整个页面可以在垂直方向上滚动。 二、在滚动页面中嵌入ListView 有时候我们需要在滚动页面中嵌入ListView,这时候可以使用Android系统提供的NestedScrollView组件。NestedScrollView是ScrollView的子类,可以包含多个子视图,并且可以在垂直方向上进行滚动。和ScrollView不同的是,NestedScrollView可以嵌套其他可滚动的组件,例如ListView等。 下面是一个简单的例子: ``` <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第一行"/> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@null" android:dividerHeight="0dp" android:scrollbars="none"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第三行"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第四行"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是第五行"/> </LinearLayout> </android.support.v4.widget.NestedScrollView> ``` 上面的代码中,我们将NestedScrollView作为根布局,然后在NestedScrollView内部添加了一个垂直方向的LinearLayout。这个LinearLayout包含了多个TextView和一个ListView。由于ListView也可以滚动,所以我们需要将它的滚动条隐藏掉,然后就可以在滚动页面中嵌入ListView了。 以上就是Android开发中如何实现全屏滚动和在滚动页面中嵌入ListView的方法。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值