Android - 如何跟踪应用程序的恢复,仅当您退出并返回应用程序时?

7

我有一个问题。为了分析目的,我需要跟踪APP(而不是活动)何时恢复。我现在遇到的问题是,如果我将跟踪器放在活动的OnResume事件上,每当用户在不同的活动之间来回切换时,它都会触发。

我该如何避免这种情况?如何跟踪真正的"应用程序恢复"(用户实际退出应用程序并重新进入),而不是活动恢复?

任何想法都非常感谢。谢谢。

3个回答

5

我遇到了相同的问题,并通过创建基本活动来解决它:

public class mActivity extends Activity{

    public static final String TAG = "mActivity";

    public static int activities_num = 0;


    @Override
    protected void onStop() {
        super.onStop();
        activities_num--;
        if(activities_num == 0){
            Log.e(TAG,"user not longer in the application");
        }
    }


    @Override
    protected void onStart() {
        super.onStart();
        activities_num++;
    }
}

我的应用程序中的所有其他活动都继承了mActivity。当一个活动不再可见时,onStop被调用。当activities_num == 0时,所有活动都不可见(这意味着用户关闭了应用程序或将其传递到后台)。当用户启动应用程序(或从后台重新启动它)时,onStart将被调用(当活动可见时调用onStart),并且activities_num > 0。希望这有所帮助...


这是正确的方式...当 activities_num == 0(后台)或 activities_num == 1(前台)时,您的“事件”发生。 - SirKnigget

2
使用您的应用程序的Application对象(请参见http://developer.android.com/reference/android/app/Application.html)。如果您创建了一个自定义的Application类并在AndroidManifest.xml文件中配置它,则可以执行以下操作:
  1. 在Application对象的onCreate()中开始跟踪。
  2. 仪器化所有活动,使其onPause()和onResume()方法检查Application对象,并查看它们是否是第一个运行的活动,或者它们是否正在继续先前运行的应用程序实例。
  3. 在Application对象的onDestroy()中停止跟踪。
在某种程度上,大多数分析包(如Flurry)都会执行类似于此的操作。您需要进行一些状态机工作才能使其正常工作,但这不应该太复杂。

我已经思考了一段时间关于这个答案。我还不能完全想清楚第二步应该怎么做。能否详细说明一下?我也想做同样的事情,但是找不到正确的逻辑来确定我是否返回到了应用程序。 - Jeff

0

不要使用OnResume(),而是将其挂钩到您的主活动的OnCreate()事件中。


我看到的问题是,假设我们有活动A、B和C。它们可以相互跳转。每次调用其中一个活动时,OnResume()总是会被触发。用户可能会在活动B或C上离开应用程序,进行一些浏览,然后回到活动B或C。 - EdGs
如果用户恢复应用程序,这将无法工作,因为当前活动的onCreate()方法不会被调用。 - Bharat Dodeja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接