【问题标题】:Google Analytics for Android using multiple ActivitiesGoogle Analytics for Android 使用多个活动
【发布时间】:2011-09-15 05:42:37
【问题描述】:

我正在尝试使用website of the respective SDK 上的信息将 Google Analytics 集成到我的 Android 项目中。但是,可用的文档很少。我的项目有 6 个不同的活动,我注意到使用网站上的方法会导致在谷歌分析中对每个正在打开的活动进行唯一的访问,即使它仍在同一个会话中。显然,适用于 Android 的 Google Analytics(分析)从不重复使用以前使用过的会话。

他们的方法是在 onCreate 中开始跟踪活动,然后在 onDestroy 中停止跟踪。我遇到的问题是,如果用户按下主页按钮而不是后退按钮,会话将保持活动状态,因为 Activity 不会被破坏。因此,我选择在 onResume 和 onPause 中执行此操作,但这意味着打开新 Activity 时会打开新会话。

有谁知道真正跟踪多个活动的单个会话的方法?

【问题讨论】:

标签: android google-analytics


【解决方案1】:

研究了一个Activity的生命周期,我得出以下结论。

当从一个 Activity A 切换到另一个 Activity B 时,A 的 onStop 方法在 B 的 onStart 方法之后被调用。然后我所做的是每次在 onStart 方法中访问(静态)跟踪器时增加一个引用计数器.在 onStop 方法中,我会首先检查引用计数器是否为 0,如果是则停止跟踪器。在 onStop 方法结束时,我会减少引用计数器。

目前这似乎工作得很好,并且当应用程序有多个可以充当入口点的活动时也应该工作。

【讨论】:

  • 我注意到一个缺点:设备屏幕关闭时不会调用 onStop,因此会话将保持活动状态...
  • 这并不总是有效,因为 onStop 并不总是在 onStart 之后被直接调用,因为它可能会延迟到第三个活动开始,导致计数器达到 2 和当前活动不再可见时减为 1。
  • 在某些情况下可能会出现问题,但我只需要知道是否有任何引用,因此我只检查引用计数器的零值或非零值。
【解决方案2】:

重复我在此处发布的答案: Google Analytics in Android app - dealing with multiple activities

我使用的方法是使用绑定服务(我碰巧已经在使用一个,因此免于创建额外的样板代码。)

绑定服务只会在有活动绑定到它的情况下持续存在。我的应用程序中的所有活动都绑定到此服务,因此它仅在用户积极使用我的应用程序时才会持续 - 因此它是一个真正的“会话”。

我使用我扩展的 Application 的单例实例启动跟踪器,并添加了一个静态 getInstance() 方法来检索实例:

// Non-relevant code removed

public IBinder onBind(Intent intent) {
    tracker = GoogleAnalyticsTracker.getInstance();
    tracker.startNewSession(PROPERTY_ID, MyApp.getInstance());
}


public boolean onUnbind(Intent intent) {
    tracker.stopSession();
}

见:http://developer.android.com/guide/topics/fundamentals/bound-services.html

【讨论】:

  • 但是如果您使用这种方法,如果用户按下主页按钮,会话将保持活动状态,对吧?我期望的行为是按下主页按钮也会结束会话。
  • 不,在这种情况下不是。但这取决于您在活动中绑定和取消绑定服务的位置。就我而言,我在 onStart() 中绑定并在 onStop() 中取消绑定。根据:developer.android.com/guide/topics/fundamentals/…“活动的可见生命周期发生在对 onStart() 的调用和对 onStop() 的调用之间”因此,如果我的某个活动在前台不可见,则该服务未绑定并且会话未激活。
  • 我应该补充一点,如果您从 Activity 启动外部 Intent,您可能需要使用 startActivityForResult() 或其他一些机制来跟踪您的应用何时打开但您的任务在屏幕外.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 1970-01-01
相关资源
最近更新 更多