2

私のアプリケーションは大きくなっています。

堅牢にするために、アクティビティの外にある別のクラスに分割することにしました。それぞれが一連のアクティビティ機能を表しています。

問題は、これらのクラスでコンテキスト/アクティビティ変数が必要になることがよくあることです。

これは私にとって混乱を引き起こします:

MainActivity クラスを「拡張」してから、parents() get context/actvitiy メソッドを使用するか、次のように Context/Activity 変数を使用して各クラスをインスタンス化する必要があります。

static private BrowseHandler instance;

static public void init(Context ctx, FragmentActivity ac) {
    if (null==instance) {
        instance = new BrowseHandler(ctx, ac);
    }
}
static public BrowseHandler getInstance() {
    return instance;
}

どちらのアプローチが優れていますか?

それとも、要点をすべて逃したのでしょうか。アクティビティ コードをアクティビティ内に保持する必要がありますか?

4

1 に答える 1

2

Contextを静的フィールドに入れないでください。静的変数はクラスのすべてのインスタンスで共有されるため、コンテキストを静的変数に入れると、1つのコンテキストでのみ使用できるため、クラスの再利用性が低下します。(静的フィールドを初期化するために使用されたコンテキスト)。

代わりに、アクティビティにないコードを呼び出すときに、コンテキストをメソッド引数として渡します。

MainActivityを拡張するというあなたの考えに関して...それは奇妙なパターンのようです。どのようにそれをインスタンス化するつもりですか?

new MyExtendedMainActivity(this);

MainActivityを拡張するための実際の付加価値はありません。唯一の欠点があります:他のものを拡張することはできません。さらに、AndroidOSでは処理されないActivityオブジェクトがあります。Androidでは、アクティビティを自分でインスタンス化することは決してないことを忘れないでください。Androidフレームワークが自動的にアクティビティを実行し、構成するためのコールバックしかありません。

于 2013-02-16T15:04:47.467 に答える