1

私が実際に欲しかったものは?

私のアプリには、4/5のアクティビティと、サーバーと通信する1つのバックグラウンドスレッドがあります。私は自分のアプリの最も多くのアクティビティを取得する方法が欲しかったのです。しかし、驚くべきことに、彼らは私がそれを得ることができなかったのですか?

私がしたこと ?

しばらく検索した後mCurrentOnTopActivity、Typeの変数を実装ActivityonResume()onPause()その変数を設定したすべてのアクティビティを実行しました。(それは実際には悪い方法です)。

どこにたどり着きましたか?

サーバーからメッセージを受信した後、UIスレッドで何かを実行したい場合、つまりダイアログを表示したり更新したりする場合がありますが、実際に実行されているアクティビティを参照しているListViewかどうかを確認する方法はありmCurrentOnTopActivityません(終了または何らかの理由で焦点が合っていない)。

私が今欲しいものは? 今、私は基本的に次の2つの問題について助けを求めています:-

  1. 現在実行中のアプリのアクティビティの上位を確認するにはどうすればよいですか?
  2. アクティビティがまだ実行されているかどうかを確認するにはどうすればよいですか(つまり、とisActicitAlive() (imaginary function)の呼び出しの間にtrueを返すようなものが必要ですか?onResume()onPause()

アクティビティで変数を使用して2ポイントを実装し、とに設定しましonResume()onPause()。しかし、これがこれを行う唯一の方法ですか?

4

2 に答える 2

2
ArrayList<String> runningactivities = new ArrayList<String>();

ActivityManager activityManager = (ActivityManager)getBaseContext().getSystemService (Context.ACTIVITY_SERVICE); 

List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); 

for (int i1 = 0; i1 < services.size(); i1++) { 
    runningactivities.add(0,services.get(i1).topActivity.toString());  
} 

if(runningactivities.contains("ComponentInfo{com.app/com.app.main.MyActivity}")==true){
    Toast.makeText(getBaseContext(),"Activity is in foreground, active",1000).show(); 
}

これにより、探しているアクティビティが実行されているかどうかを確認できます。

esle、onStart()andonStop()メソッドを使用する場合は、次のコードを使用できます。

class MyActivity extends Activity {
     static boolean active = false;

      @Override
      public void onStart() {
         super.onStart();
         active = true;
      } 

      @Override
      public void onStop() {
         super.onStop();
         active = false;
      }
}
于 2012-12-13T09:56:27.087 に答える
1

サービスバインディングを使用して、最上位のアクティビティのみがサービスにバインドされるようにすることができます。

于 2012-12-13T09:58:30.640 に答える