Androidで現在のフォアグラウンドアクティビティコンテキストを取得するにはどうすればいいですか? 質問する

Androidで現在のフォアグラウンドアクティビティコンテキストを取得するにはどうすればいいですか? 質問する

ブロードキャストが実行されるたびに、フォアグラウンド アクティビティに対するアラートを表示したいと思います。

ベストアンサー1

(注: API 14 で公式 API が追加されました。この回答を参照してくださいhttps://stackoverflow.com/a/29786451/119733 )

以前の回答 (waqas716) は使用しないでください。

アクティビティへの静的参照のため、メモリ リークの問題が発生します。詳細については、次のリンクを参照してくださいhttp://android-developers.blogspot.fr/2009/01/avoiding-memory-leaks.html

これを回避するには、アクティビティの参照を管理する必要があります。マニフェスト ファイルにアプリケーションの名前を追加します。

<application
    android:name=".MyApp"
    ....
 </application>

アプリケーションクラス:

  public class MyApp extends Application {
        public void onCreate() {
              super.onCreate();
        }

        private Activity mCurrentActivity = null;
        public Activity getCurrentActivity(){
              return mCurrentActivity;
        }
        public void setCurrentActivity(Activity mCurrentActivity){
              this.mCurrentActivity = mCurrentActivity;
        }
  }

新しいアクティビティを作成します:

public class MyBaseActivity extends Activity {
    protected MyApp mMyApp;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mMyApp = (MyApp)this.getApplicationContext();
    }
    protected void onResume() {
        super.onResume();
        mMyApp.setCurrentActivity(this);
    }
    protected void onPause() {
        clearReferences();
        super.onPause();
    }
    protected void onDestroy() {        
        clearReferences();
        super.onDestroy();
    }

    private void clearReferences(){
        Activity currActivity = mMyApp.getCurrentActivity();
        if (this.equals(currActivity))
            mMyApp.setCurrentActivity(null);
    }
}

したがって、アクティビティの Activity クラスを拡張する代わりに、MyBaseActivity を拡張するだけです。これで、次のようにしてアプリケーションまたはアクティビティ コンテキストから現在のアクティビティを取得できます。

Activity currentActivity = ((MyApp)context.getApplicationContext()).getCurrentActivity();

おすすめ記事