2017-06-13 50 views
2

我弄瞎了一個Android應用類,它實現了Singleton模式並將一個靜態對象綁定到它。在Android應用程序中使用靜態成員不好?

public class App extends Application 
{ 
    public static BigObject myObj; 

    private static App instance; 

    public static App getInstance() 
    { 
     return instance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
     myObj = new BigObject(this); 
    } 

} 

是否有任何問題與此實現,對於性能,內存泄漏或可能例外,當的getInstance()。myObj.something()被調用的形式廣播接收器或服務?

+0

我很感興趣看到這一個很好的答案。 Android Studio也警告我關於'Application'類中的'static'變量,關於內存泄漏。 – Vucko

+0

也是,另一方面,這裏有很多這些實現在stackoverflow和各種博客。 – glethien

+1

爲什麼使用static和getInstance?您可以在任何有上下文對象的地方訪問應用程序所以你讓bigObject變成簡單的字段並通過getter訪問它。 –

回答

1

我看到的唯一缺點是有些難看的代碼,使用依賴注入會更好。我不知道,但如果操作系統保證所有其他組件將在Application :: onCreate之後啓動,則不會出現問題。即使非主線程也不會緩存bigObject的值。但是如果你想在onCreate之後設置bigObject的值,或者它的創建需要很長時間,你可能會面臨數據競爭或啓動緩慢的問題。

1

我沒有看到這個實現的任何問題。 Application對象基本上是一個單例。

+0

是的,但是Android Studio會警告我在Application類中有靜態對象,並且感覺不好,因爲我覺得在一個基本上是單例的Application類中實現一個singleton是不好的。 – glethien