Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google Analytics for Android使用多种活动_Android_Google Analytics - Fatal编程技术网

Google Analytics for Android使用多种活动

Google Analytics for Android使用多种活动,android,google-analytics,Android,Google Analytics,我正试图利用网站上的信息将谷歌分析集成到我的Android项目中。但是,现有的文档很少。我的项目有6个不同的活动,我注意到在网站上使用该方法会导致在Google Analytics中对正在打开的每个活动进行唯一的访问,即使它仍然在同一个会话中。显然,Google Analytics for Android从不重用以前使用过的会话 他们的方法是在onCreate中开始跟踪活动,然后在onDestroy中停止跟踪。我的问题是,如果用户按下home按钮而不是back按钮,会话将保持活动状态,因为活动不

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

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


有人知道如何在多个活动中跟踪单个会话吗?

在研究了活动的生命周期后,我得出了以下结论

当从一个活动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()或其他机制来跟踪您的应用程序何时打开,但您的任务何时离开屏幕。