最近看了一下Android,只看书不总结一下,总感觉东西并没有放在脑子里,人过留名,雁过留声,遂写下这篇总结。
书本看的是《Android编程兵书》,但这篇总结的大纲是按照《第一行代码》的章节目录撰写的。两本书的内容结构大致相同,Android入门的话只看其中一本就够了。
Android中广播分为标准广播和有序广播。标准广播是一种完全异步执行的广播,所有的广播接收器几乎都会在同一时刻接收到广播,这也意味着标准广播是不能被截断的。有序广播是同步执行的广播,同一时刻只会有一个接收器能接收到这条广播,并且可以选择是否截断该广播。
动态注册广播
public class MainActivity extends Activity{
private IntentFilter intentFilter;
private NetworkChangeRecever networkChangeRecever;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addActioin("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeRecever = new NetworkChangeRecever();
registerReceiver(networkChangeRecever, intentFilter);
}
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(networkChangeRecever);
}
class NetworkChangeRecever extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isAvailable()){
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
}
静态注册实现开机启动
public class BootCompleteReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
Toast.makeText(context, "Boot Complete", Toast.LENGTH_SHORT).show();
}
}
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED">
<application>
<receiver android:name=".BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
发送自定义广播
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
发送标准广播:sendBroadcast(intent)
发送有序广播:sendOrderedBroadcast(intent, null)
可在intent-filter中设置广播接收器的优先级
截断广播:abortBroadcast();
使用本地广播
为解决安全性问题,引入了本地广播机制,即发出的广播只能在APP内容传递。主要是使用了一个LocalBroadcastManager对广播进行管理,并提供发送和注册广播接收器的方法。
优势:防止机密数据泄露,高效
广播的最佳实践:实现强制下线功能
Tips
1、广播接收器中是不允许开启线程的,广播接收器多用于创建状态栏通知、启动一个服务
2、intent添加FLAG_ACTIVITY_NEW_TASK标志的意义?
网友评论