iT邦幫忙

DAY 1
4

安迪豬的Android學習筆記系列 第 1

我的Android筆記(3)

開發Android時的那些筆記...!!
每個Android裡幾乎都一定會看到的觀察者模式...
*******************************

比較常見的是當監聽一個按鈕事件的Listener:

mButton.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		// Do something
	}
});

或者是觀察一事件觸發或完成後並回傳事件處理結果.
程式裡也才常看到類似下列的Callback:

mClazz.doSomething(new Callback() {
	@Override
	public void callback(Result result) {
		// Do something with the result. 
	}
});

通常實作這類型的模式你會需要一個介面當作listener:

public interface Callback{
    void callback(Result result);
}

然後在可被觀察的類別裡寫一個可以加入該listener的函式:

public class Clazz{
    public void doSomething(Callback listener){
        Result result = new Result();
        // do something asynchronously 
        if(listener!=null) {
            listener.callback(result);
        }
    }
}

基本上大概是這樣。
當Clazz完成一些非同步的工作項目後,例如下載完後,會回傳一個Result,
然後我們可以再對這個Result在Clazz以外的Scope做一些額外的處理。

這樣的匿名參數寫法其實是比較偷懶的。
比較要注意的地方像是,

  1. 回傳時的程式碼是在哪個執行序裡執行
  2. 寫了很多不必要的全域變數只為了能在callback裡被呼叫
  3. 鐵鎖連環,回傳中的回傳,匿名中的匿名

能排除這些問題,程式碼能多簡單就多簡單囉^^"

了解後再去看Observable/Observer,印象會比較深刻。
http://developer.android.com/reference/java/util/Observer.html
http://developer.android.com/reference/java/util/Observable.html


下一篇
我的Android筆記(4)
系列文
安迪豬的Android學習筆記12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

我要留言

立即登入留言