Google Analytics for Android使用多种活动
我正试图利用网站上的信息将谷歌分析集成到我的Android项目中。但是,现有的文档很少。我的项目有6个不同的活动,我注意到在网站上使用该方法会导致在Google Analytics中对正在打开的每个活动进行唯一的访问,即使它仍然在同一个会话中。显然,Google Analytics for Android从不重用以前使用过的会话 他们的方法是在onCreate中开始跟踪活动,然后在onDestroy中停止跟踪。我的问题是,如果用户按下home按钮而不是back按钮,会话将保持活动状态,因为活动不会被破坏。因此,我选择在onResume和onPause中执行此操作,但这意味着在打开新活动时会打开新会话Google Analytics for Android使用多种活动,android,google-analytics,Android,Google Analytics,我正试图利用网站上的信息将谷歌分析集成到我的Android项目中。但是,现有的文档很少。我的项目有6个不同的活动,我注意到在网站上使用该方法会导致在Google Analytics中对正在打开的每个活动进行唯一的访问,即使它仍然在同一个会话中。显然,Google Analytics for Android从不重用以前使用过的会话 他们的方法是在onCreate中开始跟踪活动,然后在onDestroy中停止跟踪。我的问题是,如果用户按下home按钮而不是back按钮,会话将保持活动状态,因为活动不
有人知道如何在多个活动中跟踪单个会话吗?在研究了活动的生命周期后,我得出了以下结论 当从一个活动A切换到另一个活动B时,在B的onStart方法之后调用A的onStop方法。然后我所做的是每次在onStart方法中访问(静态)跟踪器时增加一个引用计数器。在onStop方法中,我首先检查引用计数器是否为0,如果为0,则停止跟踪器。在onStop方法的末尾,我将减少引用计数器
目前这似乎运行得很好,当应用程序有多个可以作为入口点的活动时,也应该可以运行。重复我在这里发布的答案: 我正在使用的方法是使用绑定服务(我碰巧正在使用一个绑定服务,因此没有创建额外的锅炉板代码) 一个绑定的服务只有在有活动绑定到它时才会持续。我的应用程序中的所有活动都绑定到这项服务,因此它只在用户积极使用我的应用程序时才持续,因此这是一个真正的“会话” 我使用应用程序的一个单例实例启动跟踪器,我已扩展并添加了一个静态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();
}
请参阅:我注意到了一个缺点:当设备屏幕关闭时,不会调用onStop,因此会话将保持活动状态……这并不总是有效,因为
onStop
并不总是在onStart
后立即调用,因为它可能会延迟到第三个活动开始时,导致计数器达到2,并在当前活动不再可见时递减为1。在某些情况下可能会出现问题,但我只需要知道是否存在引用,因此我只检查引用计数器的零值或非零值。相关:但如果使用此方法,如果用户按下home按钮,会话将保持活动状态,对吗?我期望的行为是按下home按钮也会结束会话。不,在这种情况下不是这样。但这取决于您在活动中绑定和解除绑定服务的位置。在我的例子中,我在onStart()中绑定,在onStop()中解除绑定。根据:“活动的可见生存期发生在对onStart()的调用和对onStop()的调用之间”,因此,如果我的某个活动在前台不可见,则服务不绑定,会话也不活动。我应该补充一点,如果你从活动中启动外部意图,您可能需要使用startActivityForResult()或其他机制来跟踪您的应用程序何时打开,但您的任务何时离开屏幕。