Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android設計模式--完美單例模式

Android設計模式--完美單例模式

編輯:關於Android編程

Android完美單例模式:

以前寫的單例模式考慮不完全;

面試的時候,考到這樣的問題;

想到這麼的問題,居然也會出現,只是後面才發現自己寫的單例,太過幼稚;

所以到網上找了一些資料,重新寫一個;

 

 

package com.example.demo;

public class HttpUtils {
	//volatile的作用是: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.
	//一個定義為volatile的變量是說這變量可能會被意想不到地改變,
	//這樣,編譯器就不會去假設這個變量的值了。
	//精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器裡的備份。
	private volatile static HttpUtils instance;
	
	private HttpUtils()
	{
		//構造函數 邏輯處理 
	}

	public static HttpUtils getInstance()
	{
		//第一次判斷是否為空
		if(instance==null)
		{
			synchronized (HttpUtils.class) {//鎖
				//第二次判斷是否為空 多線程同時走到這裡的時候,需要這樣優化處理
				if(instance ==null)
				{
					instance =new HttpUtils();
				}
			}
		}
		return instance;
	}
}

單例模式,在Android Framework 中運用廣泛;

比如說:

1、輸入法管理 InputMethodManager

2、View獲得點擊、焦點、文字改變等事件的分發管理 AccessibilityManager

 

 

public final class InputMethodManager {
    static final boolean DEBUG = false;
    static final String TAG = "InputMethodManager";

    static final String PENDING_EVENT_COUNTER = "aq:imm";

    static InputMethodManager sInstance;

    InputMethodManager(IInputMethodManager service, Looper looper) {
        mService = service;
        mMainLooper = looper;
        mH = new H(looper);
        mIInputContext = new ControlledInputConnectionWrapper(looper,
                mDummyInputConnection, this);
    }

    /**
     * Retrieve the global InputMethodManager instance, creating it if it
     * doesn't already exist.
     * @hide
     */
    public static InputMethodManager getInstance() {
        synchronized (InputMethodManager.class) {
            if (sInstance == null) {
                IBinder b = ServiceManager.getService(Context.INPUT_METHOD_SERVICE);
                IInputMethodManager service = IInputMethodManager.Stub.asInterface(b);
                sInstance = new InputMethodManager(service, Looper.getMainLooper());
            }
            return sInstance;
        }
    }
    
    /**
     * Private optimization: retrieve the global InputMethodManager instance,
     * if it exists.
     * @hide
     */
    public static InputMethodManager peekInstance() {
        return sInstance;
    }
}


 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved