編輯:關於Android編程
在開發中,我們經常會遇到這麼一種情況,別處處理了一大堆事情,但是處理的結果要通知另一處的程序,另一處接受到這個處理結果在繼續往下做一些事情。或者說我們要監聽一些系統的一些狀態,比如說網絡的變化,電量的變化等等。這是我們就可以用安卓的四大組件之一————廣播來完成我們需要的功能。
BroadCastReceiver—廣播
廣播在用時需要在程序裡進行注冊,然後我們才能用。注冊它有倆中方法,一種是靜態注冊,而是動態注冊。
靜態注冊
靜態注冊就是在manifest裡寫好了廣播程序,在設置成程序開機xie的時候將廣播開啟,然後我們在廣播的接受方法裡接收廣播信息即可。如:
1.自定義我們的廣播,繼承BroadCastReceiver
public class TestBroadCastReceive extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent!= null) { if("myAction".equals(intent.getAction())) { Log.i("info", intent.getStringExtra("data")); } } } }
2.manifest配置
3.java程序發送廣播
private void sendBroad(){ Intent i = new Intent(); i.setAction("myAction"); i.putExtra("data","這是我發的信息"); sendBroadcast(i); }
在某處調用這個方法,我們在日志當中就可以看到我們發的信息。
.473 2667-2667/com.android.app I/info: 這是我發的信息
在這裡我們看到要用的到的倆個配置屬性,和
加的是我們要接受匹配的東西,不一樣的我不管,我不接收。這個先了解即可,後面我們在詳解。
靜態廣播注冊後,就是和手機一起走了,手機光機了,它才停止,手機開啟了,它就啟動了。生命周期是一直存在的,一直處於候命狀態。這樣當我們就需要一些廣播,處理完就沒事了,不想在用了,如果用這種方式,耗費資源還不說還費電。那我們就可以用第二種動態廣播來實現。靜態是注冊後不管,而動態則你可以隨時管理我們的廣播。廢話不多說,進入主題。
動態廣播
上面說了動態廣播的好處,那我們直接貼代碼。
1.廣播還是那個廣播,我們不動。
2.在程序啟動後,注冊
private void register() {
broadcast = new TestBroadCastReceive();
IntentFilter filter= new IntentFilter();
filter.addAction("myAction");
registerReceiver(broadcast,filter);
}
3.發送廣播
private void sendBroad(){
Intent i = new Intent();
i.setAction("myAction");
i.putExtra("data","這是我發的信息,動態的");
sendBroadcast(i);
}
打印日志:
.902 12265-12265/com.android.app I/info: 這是我發的信息,動態的
動態的廣播注冊後,當我們退出當前注冊頁面時候,記得要取消廣播,
unregisterReceiver(broadcast);否則會報錯:
android.app.IntentReceiverLeaked: Activity com.android.app.TestActivity has leaked IntentReceiver com.android.app.TestBroadCastReceive@a181781 that was originally registered here. Are you missing a call to unregisterReceiver()?
雖說不會影響我們的程序,但是會造成內存溢出情況。
當我們在注冊廣播是我們可以設置一個級別,
IntentFilter filter= new IntentFilter();
filter.addAction("myAction");
filter.setPriority(int);
設置級別越高,那麼它先去執行,級別越低,越最後執行,用這種做一些系統攔截了等等,級別相同,看系統心情喽。
以上我們介紹的都是普通的廣播,普通的廣播執行,都是無序的,你不設置優先級,都是系統隨意的滴用,也無法使用一些setResult的一些回調API。如果要用到這些東西,那就需要有序廣播和無序廣播了。有序廣播就是執行,Context.sendOrderedBroadcast,它去執行後,receiver都是有序的去執行,你可以用abortBroadcast來中止發送廣播,不往下傳。也可以用setResult去做一些回調。
廣播的生命周期,簡單來說就是創建,接收消息,銷毀這幾部。但是在這裡處理任務時都不能超過11s。否則就是ANR了。這點大家注意一下。
好了,廣播我們先介紹到這裡,接下來。我們在介紹一位重量級組件,Service,拭目以待。
1. Testing http://developer.android.com/tools/testing/index.html Android的框架包含了一組完整的
第7節 TableLayoutTableLayout顧名思義,就是像表格一樣的布局。它是LinearLayout的子類,所以擁有TableLayout的所有屬性。7.1
1、switch(開關)mui提供了開關控件,點擊滑動兩種手勢都可以對開關控件進行操作,UI如下:默認開關控件,帶on/off文字提示,打開時為綠色背景,基本class類
首先,讓我們確認下什麼是service? service就是android系統中的服務