編輯:關於Android編程
Android中對組合模式的應用,可謂是泛濫成粥,隨處可見,那就是View和ViewGroup類的使用。在android UI設計,幾乎所有的widget和布局類都依靠這兩個類。
組合模式,Composite Pattern,是一個非常巧妙的模式。幾乎所有的面向對象系統都應用到了組合模式。
將對象View和ViewGroup組合成樹形結構以表示”部分-整體”的層次結構(View可以做為ViewGroup的一部分)。
組合模式使得用戶對單個對象View和組合對象ViewGroup的使用具有一致性。
在Android中經常要使用AlertDialog來顯示一些簡單的窗口,通常的寫法類似下面的代碼 :
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setTitle("提示")
.setMessage("確定退出?").create();
dialog.show();
可以看到dialog是通過Builder創建的,那麼Builder是如何同AlertDialog協同工作的呢?其實AlertDialog的創建就是使用Builder模式,廢話不多說,直接上代碼吧。
Activity的onSaveInstanceState和onRestoreInstanceState就是通過Bundle這種序列化的數據結構來存儲Activity的狀態。以便可以恢復Activity在onDestory之前保存的信息。
View.onVisibilityChanged方法,就是提供了一個狀態模式的實現,允許在View的visibility發生改變時,引發執行onVisibilityChanged方法中的動作。比如View的GONE,VISIBLE狀態發生改變時,行為改變。
android中有很多系統級別的全局變量,如時間,輸入法,賬戶,狀態欄等等,android中對這些都直接或者有些間接用到了單例模式。
在Android中,最典型的觀察者模式就是”廣播“。
(1)TimelineReceiver是觀察者;
(2)重寫OnReceive方法,來定義當收到狀態變化時,訂閱者的行為;
class TimelineReceiver extends BroadcastReceiver { // 1
@Override
public void onReceive(Context context, Intent intent) { // 2
cursor.requery(); // 3
adapter.notifyDataSetChanged(); // 4
Log.d("TimelineReceiver", "onReceived");
}
}
android中用到許多多線程多進程,所以必然大量使用到Runbable,Thread。其實用的就是最簡單的命令模式。
public interface Runnable {
public abstract void run();
}
調用者Thread簡化版代碼:
//命令模式這裡不需要繼承Runnable接口,但是這裡考慮到實際情況,比如方便性等,繼承了Runnable接口,實現了run方法,這個是Thread自身的運行run的方法
class Thread implements Runnable {
private Runnable target;
public Thread(Runnable target) {
this.target = target;
}
public synchronized void start() {
if (threadStatus != 0 || this != me)
throw new IllegalThreadStateException();
group.add(this);
start0();//這個是本地方法,調用run方法
if (stopBeforeStart) {
stop0(throwableFromStop);
}
}
//可選
public void run() {
if (target != null) {
target.run();
}
}
}
客戶端只需要new Thread(new Runnable(){}).start()就開始執行相關的一系列的請求,這些請求大部分都是實現Runnable接口的匿名類。
如Resource.getDrawable方法的實現邏輯是這樣的:創建一個緩存來存放所有已經加載過的,如果getDrawable中傳入的id所對應的Drawable以前沒有被加載過,那麼它就會根據id所對應的資源類型,分別調用XML解析器生成,或者通過讀取包中的圖片資源文件來創建Drawable。
而Resource.getDrawable把涉及到多個對象、多個邏輯的操作封裝成一個方法,就實現了一個調解者的角色。
假設一個Activity A去綁定一個Service S,那麼A調用S中的每一個方法其實都是通過系統的Binder機制的中轉,然後調用S中的對應方法來做到的。Binder機制就起到了代理的作用。
對於android開發者來說起,適配器模式簡直太熟悉不過,有很多應用可以說是天天在直接或者間接的用到適配器模式,比如ListView。
ListView用於顯示列表數據,但是作為列表數據集合有很多形式,有Array,有Cursor,我們需要對應的適配器作為橋梁,處理相應的數據(並能形成ListView所需要的視圖)。
正是因為定義了這些適配器接口和適配器類,才能使我們的數據簡單靈活而又正確的顯示到了adapterview的實現類上。
前幾天因為在省公安廳做一個通訊類之類的應用;碰到個問題,就是download人員信息將信息保存到本地數據庫完成的時候,菊花轉還沒有dismission掉程序就崩潰了;當然
凱撒密碼1. 介紹凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表
1、首先對manifest注冊SD卡讀寫權限 要說明一下,我這裡沒有用MainActivity.class作為軟件入口 復制代碼 代碼如下: AndroidManifes
前面介紹了在Android中實現網絡通信,這篇文章將是對前面介紹的技術的一個綜合運用,制作一個簡單的新聞客戶端,在這個新聞客戶端中用到了ListView、ListView