面试准备(一) 注册广播有哪几种方式,有什么区别
2016-02-05 10:29
447 查看
BroadcastReceiver用于监听被广播的事件
必须被注册,有两种方法:
1、在应用程序的代码中注册
注册BroadcastReceiver:
registerReceiver(receiver,filter);
取消注册BroadcastReceiver:
unregisterReceiver(receiver);
当BroadcastReceiver更新UI,通常会使用这样的方法注册。启动Activity时候注册BroadcastReceiver,Activity不可见时候,取消注册。
2、在androidmanifest.xml当中注册
<receiver>
<intent-filter>
<action android:name = "android.intent.action.PICK"/>
</intent-filter>
</receiver>
1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。
2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
使用这样的方法注册弊端:它会始终处于活动状态,毕竟是手机开发,cpu和电源资源比较少,一直处于活动耗费大,不利。
动态注册一个SD卡事件监听:
必须被注册,有两种方法:
1、在应用程序的代码中注册
注册BroadcastReceiver:
registerReceiver(receiver,filter);
取消注册BroadcastReceiver:
unregisterReceiver(receiver);
当BroadcastReceiver更新UI,通常会使用这样的方法注册。启动Activity时候注册BroadcastReceiver,Activity不可见时候,取消注册。
2、在androidmanifest.xml当中注册
<receiver>
<intent-filter>
<action android:name = "android.intent.action.PICK"/>
</intent-filter>
</receiver>
1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。
2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
使用这样的方法注册弊端:它会始终处于活动状态,毕竟是手机开发,cpu和电源资源比较少,一直处于活动耗费大,不利。
动态注册一个SD卡事件监听:
SdcardStateChanageReceiver sdcardStateReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_REMOVED); filter.addAction(Intent.ACTION_MEDIA_EJECT); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addDataScheme("file"); sdcardStateReceiver = new SdcardStateChanageReceiver(); registerReceiver(sdcardStateReceiver,filter); } @Override protected void onDestroy(){ unregisterReceiver(sdcardStateReceiver); } class SdcardStateChanageReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String state=android.os.Environment.getExternalStorageState(); System.out.println("SDCard 发生改变! 状态:"+state); //checkSDCard(); } public void checkSDCard(){ String state=android.os.Environment.getExternalStorageState(); System.out.println(state); if(state.equals(android.os.Environment.MEDIA_REMOVED ) || state .equals(android.os.Environment.MEDIA_UNMOUNTED)){ System.out.println("SDCard 已卸载!"); } } }
相关文章推荐
- Java系统程序员修炼之道(转载于CSDN"流浪的鱼"大大)
- 程序员必备php十大开源框架
- 【面试题1】前端全局观-待答
- (转)个人职业规划中如何使自己的职业生涯升华
- 职业素养与职业迷茫——北漂18年(42)
- 写些安卓开发的面试题
- 面试笔试杂项积累-leetcode 111-115
- 面试笔试杂项积累-leetcode 106-110
- 面试笔试杂项积累-leetcode 101-105
- 面试笔试杂项积累-leetcode 96-100
- 11个提问频率最高的PHP面试题
- PHP新浪面试题及完整答案
- 闲聊:项目延期,怎么回事?
- 职场新人 别人凭什么要教你
- 如何成为优秀的Java程序员
- 哪种锻炼方式最能让程序员远离亚健康? - 强烈推荐
- Java 面试题
- 面试:字符串集合 查找包含算法 的素数方案
- QA 面试问题汇总
- 2016年,新的开始