Android Studio 入门——003 广播broadcast

http://blog.csdn.net/knightaoko/article/details/62423919                 
//数据存储的博客

------------------------------------------------------------------------------------

今天看了两章《第一行代码》---完全代码实现了一章的内容。-

-------------------------------Start-----------------------------------------------

开启搬运工模式:广播机制的简介

安卓提供一套完整的API,允许应用程序自由的发送和接受广播。

广播有两种类型:1.标准广播:发一条消息,接收器同时接受【异步执行?】;2.有序广播:发一条消息,接收器按照优先级传递【同步执行?】

-------系统广播

Android内置了很多系统级别的广播,可以在应用程序中通过监听这些广播从而获取到系统状态。

广播的实现步骤:顾名思义--广播,首先需要一个广播源发送内容,再有一个接受器接收广播发送的内容。

发送广播消息:sendBroadcast(Intent intent) 

接受器receiver:首先需要编写一个类继承BroadcastReceiver实现onReceive()的方法---这个方法作用就是接收到广播后做出什么反应

看似到现在就完成了,但是想一下如果有很多个广播消息的话,接收器怎么判断执行什么操作?

这个就需要Intent来作为介质传输,需要做的就是给Intent做出独特的标记就好【在这里面做的就是设置action的值】

!!!还有一个很重要的事情就是需要注册Receiver!!!!!!!!!!!!

-------------------------------------使用本地广播------------------------------------------------------------------

本地广播:首先使用LocalBroadcastanager对广播进行管理,并提供了发送广播和注册广播接收器的方法。

public class MainActivity extends AppCompatActivity{

private InterFilter intentFilter;

private LocalReceiver localReceiver;

private LocalBroadcastManager localBroadcastManager;

 

class LocalReceiver extends BroadcastReceiver{

public void onReceive(Context context,Intent intent ){

Toast.makeText(context,"",Toast.LENGTH_SHORT).show();}

}

 

public void onCreate(Bundle savecInstanceState){

super.onCreate(savecInstanceState);

setContentView(R.layout.main_activity);

localBroadcastManager=LocalBroadcastManager.getInstance(this);

Button button=(BUtton)findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v){

Intent intent=new Intent("com.example.symble");

localBroadcastManager.sendBroadcast(intent);      //发送广播

}});

intentFilter=new IntentFilter();

intentFilter.setAction("com.example.symble");                         

loaclReceiver=new Receiver();

localBroadcastManager.registerReceiver(localReceiver , intentFilter);                    //注册广播监听器

}

都是一些基本代码,很简单。

 

--------------------------------广播的最佳实践---------强制下线功能-----------------------------------------

第一步:这个功能需要关闭所有的活动,也就是说我们需要一个类来控制所有的活动----ActivitrCollector

public static List<Activity> activities=new ArrayList()<>;             //需要获取到在强制退出前已经出现过的activity然后对这些对象进行操作

addActivity(Activity activity)    removeActivitr(Activity activity)      finishAll()

第二步:让项目的活动继承一个基类BaseActivity【自己创建】--主要目的在于用自定义了ActivityCollector类,来管理activity。

---具体的就是在重写的onCreate()里面在添加一个addActivity(),然后再onDestroy()里面添加一个removeActivity()

这个当然是一个很浅显的东西【在不考虑广播的接受之前】,当你需要考虑广播接收的时候,或许会想---我需要点击一个按钮或者其他的一个事件触发发送一条广播,让所有的activity都接受到,那么也就是说需要在每一个activity的java文件里面都先要实现一个receiver然后再接收相同的消息。【如果真的是这样做的,代码量将是一场灾难--特别是在活动多的时候】,或许就是这种时候继承的作用就体现的很明确了。我只需要在父类实现接收器的方法就好了。

BaseActivity 一个内部类ForceofflineReceiver:

public ForceOfflineReceiver extends BroadcastReceiver{

public void onReceive(Context context , Intent intent){

AlertDialog.BUilder builder=new AlertDIalog.Builder(ciontext);

builder.setTItle("warning");

builder.setCancelable(false);

bulider.setPositiveButton("OK",new DIalogInterface.OnclickListener(){

public void onClick(DialogInterface dialog, int which){

ActivityCollector.finishAll();

Intent intent=new Intent(context, LoginActivity.class);

startActivity(intent);

}});

bulider.show();}}}

}

然后在onSume()函数里注册接收器------需要两个部分:recevier  和  过滤器intentFilter

onResume(){

super.onResume();

 IntentFilter intentFilter=new IntentFIlter();

IntentFilter.addAction("");

receiver =new ForecOfflineReceiver();

registerReceiver(receiver , intentFilter);               //注册完就能起作用了

}

为了保证内存泄漏的问题:在onPause()里面取消receiver的注册

onPause(){

if(receiver!=NULL){

unregisterReceiver(receiver);}}               //完成了    

第三步:你现在需要发广播消息---直接在onClick()事件里面sendBroadcast(intent)   大功告成

--------------------------------------------完结---------------------------------------------

 

转载于:https://www.cnblogs.com/dreammaker-K/p/6617167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值