Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android應用程序轉到後台並回到前台判斷方法

Android應用程序轉到後台並回到前台判斷方法

編輯:關於Android編程

我們知道,當我們按返回或Home鍵退出應用程序的界面時,應用程序會在後台被掛起。這麼設計的好處是,由於應用被系統緩存在內存中,那麼在用戶打開啟動應用時就可以通過調用緩存,快速啟動應用。當然,由於當今內存和處理器能力的限制,系統會自動關閉一些進程。

那麼我如何判斷這個應用程序在前台還是後台,應用從後台回到前台了?

看到一般都是runningProcess或者runningTasks來判斷應用在前台還是後台

事實上,Android在SDK 14的時候提供了一個Callback。ActivityLifecycleCallbacks,你可以通過這個Callback拿到App所有Activity的生命周期回調。

public class Application extends android.app.Application {
   private int activityCount;//activity的count數 
   private boolean isForeground;//是否在前台
  @Override  public void onCreate() {  
   super.onCreate();    
 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {  
    @Override      
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
      } 
     @Override      public void onActivityStarted(Activity activity) { 
       activityCount++;      
}      @Override  
                  public void onActivityResumed(Activity activity) { 
     } @Override   
                   public void onActivityPaused(Activity activity) { 
     }   @Override    
                   public void onActivityStopped(Activity activity) { 
      activityCount--;        if(0==activityCount){ 
         isForeground=false;        }
      }  @Override 
                  public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
     }     @Override 
                   public void onActivityDestroyed(Activity activity) {
      }    });  }  }

這個Callback寫在Application裡的,你可以在Application初始化的時候來注冊。

通過這些回調我們可以將這個計數放在onStart()和onStop()中去。activityCount==1,那麼就是前台,activityCount==0,那就是後台。這樣判斷很很簡單了吧。

public abstract class BaseClass extends AppCompatActivity { 
判斷當前的應用程序是不是在運行
//需要申請GETTask權限
 private boolean isApplicationBroughtToBackground() { 
    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);    List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);  
   if (!tasks.isEmpty()) {      ComponentName topActivity = tasks.get(0).topActivity;
      if (!topActivity.getPackageName().equals(getPackageName())) {  
      return true;      }    }    return false;  } 
  public boolean wasBackground= false;  //聲明一個布爾變量,記錄當前的活動背景 
  @Override  public void onPause(){
    super.onPause(); 
    if(isApplicationBroughtToBackground()) 
     wasBackground= true;  }  
public void onResume(){ 
   super.onResume();    
 if(wasBackground){//   
         Log.e("aa","從後台回到前台");    }    wasBackground= false;  }}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved