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

Che*_*eng 4 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,从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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jes*_*run 6

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