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>标签中指定。内不应该有任何其他 Java 代码MainActivity.apk来启动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;
    }
}
4

1 回答 1

6

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

于 2012-06-24T17:43:49.133 回答