![](/img/trans.png)
[英]What happens in memory when the Activity is destroyed while its AsyncTask is running?
[英]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進入的情況,我將不得不用自己的狀態重新顯示單身人士? 如果是這樣,我應該在自定義應用程序類中這樣做嗎? 總是會叫嗎?
如果正確實施,則Singleton將僅返回在整個應用程序生命周期中常見的一個實例。 確保單例狀態,直到單例對象被銷毀為止,如下面“ 2”點所述。
Java垃圾收集器(GC)將收集所有未使用/未引用的對象。 這意味着,如果您的應用程序中沒有活動對象具有“引用” /“正在使用”該對象,則GC將清除它。 在這種情況下,您可能必須實例化您的對象。 不管“ ..低內存或傳入的GSM ..”如何,都會觸發Java GC,這也可以由系統決定。
不,不是在自定義應用程序類中在Singleton類實現中進行的。 方法“ getInstance()”將考慮何時實例化新對象,而何時服務現有對象。 如果有任何要實例化的自定義狀態/參數,則可能需要在getInstance()方法中傳遞它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.