- 论坛徽章:
- 0
|
BroadcastReceiver是Android中用处巨大的异步消息机制。它有轻量和跨进程的性质。一个BroadcastReceiver对象的生命周期不超过5秒,不能绑定服务和做一些耗时的操作,但是用来收发信号和消息则戳戳有余。系统也经常有BroadcastReceiver发送消息。一下为用到的一些BroadcastReceiver的一些性质,与大家分享。
1.把耗内存很多的操作,(如:下载或流量统计)注册在一个跨进程的Service里面,通过BroadcastReceiver与前台通信。
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>
消息机制一般用于跨进程的通信,但是在我们的服务里面,也可以有很好的应用,
BroadcastReceiver是service与前台通信的一种途径。加之BroadcastReceiver的生命周期比较短,把临时耗内存多的行为通过此处理,在内存回收的时候会有一定优势。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/99624/showart_2033021.html |
|