編輯:關於Android編程
單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每台計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。總之,選擇單例模式就是為了避免不一致狀態,避免政出多頭。(此段來源與網絡)
單例模式在Android源代碼中使用的很廣泛,在我熟悉的Telephony模塊就用到了不少,比如說SIM卡的管理UiccController,電話管理CallManager等。下面看看單例模式的基本模型:

懶漢式單例:
public final class CallManager {
.......
// Singleton instance
private static final CallManager INSTANCE = new CallManager();
.......
/**
* get singleton instance of CallManager
* @return CallManager
*/
public static CallManager getInstance() {
return INSTANCE;
}
.......
private CallManager() {
.......
}
.......
}
此例使用時直接用CallManager.getInstance()調用即可獲得CallManager實例。
public class UiccController extends Handler {
......
private static UiccController[] mInstance = {null, null, null, null};
......
public static UiccController make(Context c, CommandsInterface ci, int simId) {
synchronized (mLock) {
if (FeatureOption.MTK_GEMINI_SUPPORT) {
if(mInstance[simId] != null) {
throw new RuntimeException("UiccController.make() should only be called once");
}
mInstance[simId] = new UiccController(c, ci, simId);
return mInstance[simId];
} else {
if (mInstance[0] != null) {
throw new RuntimeException("UiccController.make() should only be called once");
}
mInstance[0] = new UiccController(c, ci);
return mInstance[0];
}
}
}
......
public static UiccController getInstance(int simId) {
synchronized (mLock) {
if (FeatureOption.MTK_GEMINI_SUPPORT) {
if(mInstance[simId] == null) {
throw new RuntimeException(
"UiccController.getInstance can't be called before make()");
}
return mInstance[simId];
} else {
if (mInstance[0] == null) {
throw new RuntimeException(
"UiccController.getInstance can't be called before make()");
}
return mInstance[0];
}
}
}
......
private UiccController(Context c, CommandsInterface ci, int simId) {
......
}
......
}
此例使用時,先UiccController.make()創建實例,然後UiccController.getInstance()獲取實例。
暫時沒找到例子。。。
未完待續,有不對的地方,請指正。
Android跨線程通信狀態框架Simple2Develop
基本信息Simple2Develop 是一款基於Android平台的跨線程通信框架,可以讓你以一種簡單的方式進行復雜的通信,支持同進程中多Activity之間即時交互,子
Android的Glide庫加載圖片的用法及其與Picasso的對比
GlideGlide是一個高效、開源、 Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協議發布。Glide具有獲取、解碼和展示視頻劇照、
Android基礎入門教程——8.4.4 Android動畫合集之屬性動畫-又見
1.Evaluator自定義1)Evaluator介紹 上一節中的ValueAnimator的簡單實用,使用動畫的第一步都是: 調用ValueAn
華為榮耀7i不能OTA升級系統解決方法
部分用戶反應華為榮耀7i不能進行OTA升級,不能直接再WiFi網絡下直接升級最新版的EMUI系統,你的華為榮耀7i是否也出現了這個情況呢?下面安下小編給大家