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プラットフォームの観点からは、の作成を直接制御できないため、これが正しいか安全かはわかりませんMainActivityMainActivity私が持っているつもりです

  • 起動モードはになります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;
    }
}
4

1 に答える 1

6

これを実行する理由が、アプリケーションの最初の起動時に1回だけ実行する必要がある初期化コードがある場合、またはアプリ全体の共有データを保存するためであるonCreate()場合は、のサブクラスのメソッドがApplication適している可能性があります。 Androidは、アプリケーションごとにそのうちの1つだけが存在することを保証します。その方法の説明については、このリンクを参照してください。

于 2012-06-24T17:43:49.133 に答える