1

この質問は、自分のアプリで採用したアプローチが正しいかどうか、または何らかの副作用があるかどうかをコミュニティに尋ねることを目的としています。

私が作成したもの: - アプリ内のすべてのアクティビティから拡張された、MasterAcity と呼ばれるアクティビティ。マニフェストの application タグは次のように宣言されています

<application
        android:name="my.package.name.MyApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/ApplicationStyle" >
  • 次のコードを持つ android.App.Application を拡張する MyApplication と呼ばれるクラス

    private static Context _context;
    
    public static Context getContext() {
        return _context;
    }
    
    public static void setContext(Context context) {
        _context = context;
    }
    
  • マニフェストでは、アプリケーション タグは次のように宣言されています。

    <application
        android:name="my.package.name.MyApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/ApplicationStyle" >
    

MasterActivity は、OnResume および OnCreate メソッドでこのコードを実行します

MyApplication.setContext(this);

アプリのすべてのアクティビティは、MasterActivity を拡張します。

アプリには、静的メソッドを持つ DialogHelper というクラスがあります

public static void showDialog(String message)

コンテキストとして使用android.app.AlertDialog.Builderしてダイアログを作成および表示するために使用しますMyApplication.getContext()

だから私のアプリのどこからでも私は使うことができます

DialogHelper.showDialog("my message");

このアプローチは機能しますか?または私は何かに注意を払う必要がありますか?

私の疑問は静的コンテキストにあります...

ありがとう

4

2 に答える 2

1

このアプローチは機能しますか?

ApplicationUI 作業にを使用すると、問題が発生した歴史があります。、または特定の一連の状況にActivity特化した を使用します(たとえば、 on 、on a )。ContextgetThemedContext()ActionBargetContext()Presentation

于 2013-05-04T18:41:57.890 に答える
0

onDestroyコンテキストが破棄されているアクティビティに属している場合、コンテキストを null にリセットするハンドラーも必要です。

グローバルな静的コンテキストの代わりに、このような API を好むでしょう

 DialogHelper.showDialog(this.getContext(),"my message");

[2013.5.5 更新]

すべての Activity、Service 、BroadcastReceiverContextWrapper を介して Context から間接的に派生し、 Views などの他のクラスは Context を保存して使用します。通常は getContext() 関数を介して公開します。そのため、必要に応じてコンテキストを利用できるようにする必要があります。

于 2013-05-04T18:46:43.337 に答える