将Activity视为单身人士是否安全

时间:2012-06-24 17:25:43

标签: android design-patterns

大多数情况下,在设计桌面应用程序时,我喜欢将主应用程序设为单例以方便使用。我可以轻松访问应用程序的数据和方法,而无需遍布主要的应用程序引用。

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;
    }
}

1 个答案:

答案 0 :(得分:6)

如果您要这样做的原因是因为您有一些初始化代码应该只在首次启动应用程序时运行一次,或者为整个应用程序存储共享数据,那么子类的onCreate()方法Application可能是一个更好的地方,因为Android保证每个应用程序只存在其中一个。有关如何执行此操作的说明,请参阅this链接。