編輯:關於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()獲取實例。
暫時沒找到例子。。。
未完待續,有不對的地方,請指正。
基本信息Simple2Develop 是一款基於Android平台的跨線程通信框架,可以讓你以一種簡單的方式進行復雜的通信,支持同進程中多Activity之間即時交互,子
GlideGlide是一個高效、開源、 Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協議發布。Glide具有獲取、解碼和展示視頻劇照、
1.Evaluator自定義1)Evaluator介紹 上一節中的ValueAnimator的簡單實用,使用動畫的第一步都是: 調用ValueAn
部分用戶反應華為榮耀7i不能進行OTA升級,不能直接再WiFi網絡下直接升級最新版的EMUI系統,你的華為榮耀7i是否也出現了這個情況呢?下面安下小編給大家