首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

BroadcastReceiver的几种用法

作者:  时间: 2009-08-20

BroadcastReceiverAndroid中用处巨大的异步消息机制。它有轻量和跨进程的性质。一个BroadcastReceiver对象的生命周期不超过5秒,不能绑定服务和做一些耗时的操作,但是用来收发信号和消息则戳戳有余。系统也经常有BroadcastReceiver发送消息。一下为用到的一些BroadcastReceiver的一些性质,与大家分享。

1.把耗内存很多的操作,(如:下载或流量统计)注册在一个跨进程的Service里面,通过BroadcastReceiver与前台通信。

 <service android:name="NotiService" android:process=":remote" />

   private void sendBroad() {

      Intent it = new Intent();

      it.putExtra("netTraffic", getTotal());

      it.setAction("com.dragon.net");

      this.sendBroadcast(it);

   }

 

2.一些线程需要修改其他对象的属性,但是没有任何方法能确保杀死线程时、可以同通过解除注册BroadcastReceiver的方法与线程断开。

   @Override

   protected void onResume() {

      super.onResume();

      this.registerReceiver(mReceiver, new IntentFilter("org.rintail"));

   }

  

   @Override

   protected void onStop(){

      super.onStop();

      this.unregisterReceiver(mReceiver);

   }

 

   BroadcastReceiver mReceiver = new BroadcastReceiver() {

      @Override

      public void onReceive(Context context, Intent intent){

        long value = intent.getLongExtra("net", getCurrentValue());

        Log.d(this.getClass().getName(), "Rintail :" + value);

        changeSavedNum(value);

      }

   };

 

   private void changeSavedNum(long value) {

      netTraffic += value;

      if(netTraffic > getUplimit())

        this.unregisterReceiver(mReceiver);

   }

 

3.接收系统的消息,如开机启动消息, 短信消息,网络消息等。

      <receiver android:name="SystemStartReceiver"

   android:permission="android.permission.RECEIVE_BOOT_COMPLETED">

        <intent-filter>

           <action android:name="android.intent.action.BOOT_COMPLETED" />

        </intent-filter>

      </receiver>

 

 

 

消息机制一般用于跨进程的通信,但是在我们的服务里面,也可以有很好的应用,

BroadcastReceiverservice与前台通信的一种途径。加之BroadcastReceiver的生命周期比较短,把临时耗内存多的行为通过此处理,在内存回收的时候会有一定优势。