2014-11-04 68 views
0

我正在編寫一個Xamarin應用程序,並且我有一些關於使用Android.App.Application類的問題。Android.App.Application類被設置爲空

  1. 上午我在說,在 Android.App.Application類的對象有時會重置爲null正確的嗎?
  2. 何時/爲何發生這種情況?
  3. 我怎樣才能讓我的應用程序執行這個事件,以便我能夠測試這種可能性?

以下代碼是否足以防止這種情況發生?

public class MyApplication : Android.App.Application 
{ 
    public static WebServiceData1_0 webServiceData; 

    public static void SetupObjects() 
    { 
     webServiceData = new WebServiceData1_0(); 
    } 

    public static WebServiceData1_0 GetWebServiceData() 
    { 
     if (webServiceData == null) 
     { 
      webServiceData = new WebServiceData1_0(); 
     } 
     return webServiceData; 
    } 
} 

在上面的代碼中,每個I希望使用WebServiceData1_0對象時間,我應該使用GetWebServiceData()功能。

在此先感謝

+0

getter方法應該這樣做,但它不是線程安全的。只要你只是從主線調用它,你是安全的。但我會使用雙重鎖定或其他模式,以確保線程安全。 – 2014-11-04 09:44:36

+0

我從多個活動調用Android.App.Application。這是否構成問題? – user3736648 2014-11-05 02:07:32

+0

不,只有當你從其他線程調用getter時,例如IntentService或AsyncTask。 – 2014-11-05 03:57:36

回答

0
  1. 排序的。當應用程序實例被銷燬時,這意味着操作系統刪除了您的整個應用程序,並且下次用戶點擊它(或以其他方式啓動它)時,它將被重新創建。

  2. 上面的Se。

  3. 只要確保在應用程序啓動時(也許通過覆蓋Application.OnCreate)初始化您的東西,並且如果需要時間,您也可以考慮使用Lazy進行延遲初始化。

+0

因此,只有當整個應用程序停止時,才能從應用程序類中刪除數據。這些值不會在程序執行過程中隨機重置爲空。那是對的嗎? – user3736648 2014-11-04 09:46:28

+0

是的,正確的。這也適用於靜態成員,無論它們在哪裏聲明(實際上這是你的情況,而不是應用程序實例數據)。 – 2014-11-04 09:56:15

+0

非常感謝。一個非常好的解釋。 – user3736648 2014-11-04 10:44:06