簡體   English   中英

當內存不足或應用未運行時收到通知時,我的Singletons會怎樣?

[英]What happens to my Singletons when memory is low or when I get a notification while the app is not running

在我的應用程序中,我為服務於其他類的對象使用了單例模式,並且不需要一個以上的實例。 例如,LocalstorageManager:

public class LocalStorage {

    private Context context;

    private static LocalStorage instance = null;

    protected LocalStorage() {
        // Exists only to defeat instantiation.
    }

    public synchronized static LocalStorage getInstance() {
        if (instance == null) {
            instance = new LocalStorage();
        }
        return instance;
    }

    public void setContext(Context _context) {
        instance.context = _context;
    }
    ...

在此應用中,我使用的是響應GSM通知的BroadcastReceiver:

...
@Override
protected void onPushReceive(Context context, Intent intent) {
     LocalStorage localStorage = LocalStorage.getInstance();
...

使用它們之前,我應該檢查我的單身人士狀態是否設置好嗎? 當應用程序不運行時,是否有機會遇到內存不足或GSM進入的情況,我將不得不用自己的狀態重新顯示單身人士? 如果是這樣,我應該在自定義應用程序類中這樣做嗎? 總是會叫嗎?

  1. 使用它們之前,我應該檢查我的單身人士狀態是否設置好嗎?

如果正確實施,則Singleton將僅返回在整個應用程序生命周期中常見的一個實例。 確保單例狀態,直到單例對象被銷毀為止,如下面“ 2”點所述。

  1. 當應用程序不運行時,是否有機會遇到內存不足或GSM進入的情況,我將不得不用自己的狀態重新顯示單身人士?

Java垃圾收集器(GC)將收集所有未使用/未引用的對象。 這意味着,如果您的應用程序中沒有活動對象具有“引用” /“正在使用”該對象,則GC將清除它。 在這種情況下,您可能必須實例化您的對象。 不管“ ..低內存或傳入的GSM ..”如何,都會觸發Java GC,這也可以由系統決定。

  1. 如果是這樣,我應該在自定義應用程序類中這樣做嗎? 總是會叫嗎?

不,不是在自定義應用程序類中在Singleton類實現中進行的。 方法“ getInstance()”將考慮何時實例化新對象,而何時服務現有對象。 如果有任何要實例化的自定義狀態/參數,則可能需要在getInstance()方法中傳遞它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM