2012-07-23 70 views
0

我想检测和计数,当Activity从背景到前景(当活动是可见的,增加计数)。我试图使用标志在onPause()onResume()像这样:如何检测和计数当活动从背景到前景

void onPause(){ 
    flag = true; 
} 

void onResume(){ 
if(flag){ 
//save to shared reference. 
    saveCount(getCount(count) + 1); 
flag = false; 
} 

} 

它的工作原理,当用户按下home键,将重新启动应用程序,但是当我转移Activity然后返回,但它仍然增加了计数,因为它调用的onPause()。如何防止呢?或者有没有数据呢?

回答

3

使用此方法来检查wheter应用程序被带到后台:

private boolean isApplicationBroughtToBackground(Context context) { 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      return true; 
     } 
    } 

    return false; 
} 

它需要GET_TASKS权限:

<uses-permission android:name="android.permission.GET_TASKS" />