2017-05-07 66 views
0

由於我對Android非常陌生,因此我對java中的單例類非常感興趣。我完全理解單身人士的概念,但我真的很困惑在Android中使用它,我還沒有使用它。
你能指導或解釋一個真實的例子嗎?在哪種情況下我應該使用單例類?Android中使用的單身人士?

+1

你用它在你需要它的地方... – alfasin

回答

1

這取決於您的項目以及您如何實現您的MVC或MVP結構。您可以在代碼中使用任何設計模式,並在需要的地方使用您的類。這是一個單例類的一個示例:

public class Singleton { 
private static Singleton mInstance = null; 

private String mString; 

private Singleton(){ 
    mString = "Hi!"; 
} 

public static Singleton getInstance(){ 
    if(mInstance == null) 
    { 
     mInstance = new Singleton(); 
    } 
    return mInstance; 
} 

public String getString(){ 
    return this.mString; 
} 

public void setString(String value){ 
    mString = value; 
} 

這個類創建一次,當你需要這個類的一個對象只使用對象被創建之前

+0

Singleton singleTon = getInstance(); singleTon.setName(「FirstVal」); System.out.println(singleTon.getName()); singleTon.setName(「SecondVal」); System.out.println(singleTon.getName()); 所以這是我可以如何更新值爲字符串,但只有一個實例創建整個應用程序生命週期。那是對的嗎?糾正我,如果我錯了 – John

+0

是的。 Singleton類創建一次,並且你更新之前創建的對象 –

+0

我認爲你在你的例子中忘記了一些東西。你應該讓mInstance變量爲volatile,並且在方法getInstance中,你應該將該代碼包裝在syncronize(Singleton.class)塊中。您可能想要詳細瞭解線程和併發性。 –

0

這完全取決於你的需要和要求,以爲我們用它幾乎每個項目都讓我們的生活更輕鬆。

  1. Android中我使用DatabaseHelper的單身讓我沒有要格外小心約開然後再次關閉數據庫,並與數據庫打交道鎖和數據庫的併發訪問等

檢查: - http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html

2.然後我用它來管理sharedPreferences存儲sharedpreferences這將是一個更容易維護的代碼,我不我得走了一圈又一圈,看看檢查鍵值和所有。 選中此項: - https://medium.com/@ali.muzaffar/android-sharedpreferences-singleton-to-make-life-easier-f1d802b6cd8e

3.然後,當我想要訪問應用程序中任何地方的對象並且經常需要時使用它。

希望你有一點想法在哪裏使用。

+0

很酷,這是我的預期。 – John

+0

很高興幫助。請接受答案。 –

0

在排球API最有用當你想從排球一個物體在你的應用程序

例如:對辛格爾頓這個例子說明你在你的應用程序得到一個請求隊列

public class VolleySingleton { 
private static VolleySingleton singleton; 
private RequestQueue requestQueue; 

private VolleySingleton(){ 
     requestQueue= Volley.newRequestQueue(MyApplication.getAppContext()); 
} 
public static VolleySingleton getInstance(){ 
    if(singleton==null) 
     singleton=new VolleySingleton(); 
    return singleton; 
} 

public void setRequestQueue(RequestQueue requestQueue) 
{ 
    this.requestQueue = requestQueue; 
} 

public RequestQueue getRequestQueue() { 
    return requestQueue; 
} 

} 
1

看看這個要點:https://gist.github.com/Akayh/5566992

它的工作原理,但它很快完成:

MyActivity:設置單首次+初始化mStri在私有構造NG屬性(「你好」),並顯示該值(「你好」)

設置新的價值mString:「單身」

啓動activityB並顯示mString值。 「單身人士」出現...

+0

很好的例子,非常感謝你 – John