大多数情况下,在设计桌面应用程序时,我喜欢将主应用程序设为单例以方便使用。我可以轻松访问应用程序的数据和方法,而无需遍布主要的应用程序引用。
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;
}
}
答案 0 :(得分:6)
如果您要这样做的原因是因为您有一些初始化代码应该只在首次启动应用程序时运行一次,或者为整个应用程序存储共享数据,那么子类的onCreate()
方法Application
可能是一个更好的地方,因为Android保证每个应用程序只存在其中一个。有关如何执行此操作的说明,请参阅this链接。