2012-06-24 22 views
4

大多數情況下,在設計桌面應用程序時,我喜歡將主應用程序作爲單例使用,以方便使用。我可以輕鬆訪問應用程序的數據和方法,而無需遍歷整個主應用程序參考。對我來說,將活動視爲單身是否安全

public class MainFrame extends javax.swing.JFrame { 
    // Private constructor is sufficient to suppress unauthorized calls to the constructor 
    private MainFrame() 
    { 
    } 

    /** 
    * MainFrameHolder is loaded on the first execution of Singleton.getInstance() 
    * or the first access to MainFrameHolder.INSTANCE, not before. 
    */ 
    private static class MainFrameHolder { 
     private final static MainFrame INSTANCE = new MainFrame(); 
    } 

    /** 
    * Returns MainFrame as singleton. 
    * 
    * @return MainFrame as singleton 
    */ 
    public static MainFrame getInstance() { 
     return MainFrameHolder.INSTANCE; 
    } 
} 

然而,從Android平臺來看,我不再確定它是否是正確的/安全的這樣做,因爲我有創造的MainActivity沒有直接的控制。 MainActivity我將要有

  • 啓動模式將是standard
  • 唯一一次,當MainActivity的實例將被創建時,當用戶點擊應用程序圖標時。意思是唯一的啓動方式是在AndroidManifest.xml的<application>標籤中指定。在MainActivity.apk之內不應該有任何其他的Java代碼,自己啓動MainActivity

public class MainActivity extends Activity { 
    public static MainActivity INSTANCE = null; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     assert(INSTANCE == null); 
     INSTANCE = this; 
    } 
} 

回答

6

如果你想這樣做的原因是因爲你有一些初始化代碼,當應用程序第一次運行應該只運行一次,或存儲共享數據爲您的整個應用程序中, onCreate()Application的子類的方法可能是一個更好的地方,因爲Android保證每個應用程序只有其中一個存在。請參閱this鏈接瞭解如何做到這一點的解釋。

+0

感謝您的鏈接。我也從以下鏈接中找到一個相當有用的信息:http://stackoverflow.com/questions/2002288/static-way-to-get-context-on-android –

相關問題