Android 动态广播与静态广播
學而時習,穩(wěn)固而之心
目前推薦使用動態(tài)廣播,現(xiàn)在已經(jīng)很就沒有使用過靜態(tài)廣播了.
動態(tài)廣播與靜態(tài)廣播的聯(lián)系
1 動態(tài)廣播的速度要快于靜態(tài)廣播
2 靜態(tài)廣播的生存期可以比動態(tài)廣播的長很多??
在Manifest里面注冊的系統(tǒng)廣播接收器會被緩存在系統(tǒng)中,即使當App關(guān)閉之后,如果有相應的廣播發(fā)出,應用程序仍然會被喚醒
這也是從8.0以后谷歌顯示部分靜態(tài)廣播,推薦使用動態(tài)廣播
3 動態(tài)廣播在代碼中注冊,靜態(tài)廣播在Manifest文件中配置
?
下面 通過2個案例對比 來更好的了解動態(tài)廣播與靜態(tài)廣播
1 動態(tài)廣播
activity 里面的代碼如下
public class DynamicBroadcast extends AppCompatActivity {DyReceive dyReceive;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dynamic_broadcast_layout);//實例化IntentFilter對象IntentFilter filter = new IntentFilter();filter.addAction("huxiaomu");dyReceive = new DyReceive();//注冊廣播接收registerReceiver(dyReceive, filter);findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction("huxiaomu");intent.putExtra("type", "胡小牧:發(fā)送了動態(tài)廣播");sendBroadcast(intent);}});}@Overrideprotected void onPause() {super.onPause();unregisterReceiver(dyReceive);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(dyReceive);}
} 
自己創(chuàng)建的DyReceive 代碼如下
public class DyReceive extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, intent.getStringExtra("type"), Toast.LENGTH_SHORT).show();}
} 
2 靜態(tài)廣播?
activity 代碼如下
public class BroadStaticActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.broad_static_activity_layout);findViewById(R.id.st_btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction("hly");intent.setPackage(getPackageName());intent.putExtra("type", "胡小牧:發(fā)送了靜態(tài)廣播");sendBroadcast(intent);}});}
}
 
Manifest 代碼如下
  <receiverandroid:name=".StReceive"android:enabled="true"android:exported="true"><intent-filter><!-- 自定義Action--><action android:name="hly" /></intent-filter></receiver> 
注意:這里enable是指是否啟動這個廣播接收器;exported:是否允許接收本程序以外的廣播
自己創(chuàng)建StReceive 代碼如下
public class StReceive extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Toast.makeText(context, intent.getStringExtra("type"), Toast.LENGTH_SHORT).show();}
} 
?
可以看出明顯的區(qū)別就是一個在代碼中注冊,一個在配置文件中注冊的
?
下面在來一個動態(tài)廣播監(jiān)聽網(wǎng)絡變化的代碼如下
public class MainActivity extends AppCompatActivity {private static final String tag = "-------------hxm";BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {ConnectivityManager  connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo info = connectivityManager.getActiveNetworkInfo();if (info != null && info.isAvailable()) {String name = info.getTypeName();Log.e(tag, "當前網(wǎng)絡名稱:" + name);//doSomething()} else {Toast.makeText(context, "當前網(wǎng)絡不可用", Toast.LENGTH_SHORT).show();Log.e(tag, "沒有可用網(wǎng)絡");//doSomething()}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);IntentFilter mFilter = new IntentFilter();mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);registerReceiver(receiver, mFilter);}@Overrideprotected void onPause() {super.onPause();unregisterReceiver(receiver);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(receiver);}
} 
?
demo 地址參考 希望能更好的理解廣播
總結(jié)
以上是生活随笔為你收集整理的Android 动态广播与静态广播的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 戴隐形眼镜可以滴普通的眼药水吗
 - 下一篇: 霜降牛肉是什么??