簡體   English   中英

Android Activity生命周期問題

[英]Android Activity life cycle issues

我真正想要的是什么?

在我的應用程序中,我有4/5活動和一個與服務器通信的后台線程。 我想通過某種方式獲得我應用的最頂層活動。 但令人驚訝的是他們不可能得到那個?

我做了什么 ?

在搜索了一段時間之后,我實現了Type Activity的變量mCurrentOnTopActivity ,以及我設置該變量的每個活動的onResume()onPause() (這實際上是一種糟糕的方式)。

我到達的地方?

現在他們的情況是,在收到來自服務器的一些消息之后,我想在UI線程上做一些事情,即顯示一些對話框或刷新ListView ,現在他們無法檢查mCurrentOnTopActivity是否引用了實際運行的活動(因任何原因完成或失焦)。

我現在想要什么? 現在我基本上想要幫助解決兩個問題: -

  1. 我怎么知道我的應用程序當前運行的最活躍的是哪個?
  2. 我如何知道活動是否仍在運行(即我想要一些像isActicitAlive() (imaginary function) ,它在onResume()onPause()調用之間返回true?

我在活動中使用變量並在onResume()onPause()設置了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()onStop()方法,可以使用以下代碼,

class MyActivity extends Activity {
     static boolean active = false;

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

      @Override
      public void onStop() {
         super.onStop();
         active = false;
      }
}

您可以使用服務綁定,以便只有最頂層的活動才能綁定到服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM