如果don';Android Google Analytics中的t call stop()函数?
我查看了的代码,注意到他们没有在GoogleAnalytics的实例上调用如果don';Android Google Analytics中的t call stop()函数?,android,google-analytics,Android,Google Analytics,我查看了的代码,注意到他们没有在GoogleAnalytics的实例上调用stop()函数。如果我们不调用stop(),会发生什么 代码如下: package com.google.android.apps.iosched.util; import com.google.android.apps.analytics.GoogleAnalyticsTracker; import android.content.Context; import android.content.SharedPref
stop()
函数。如果我们不调用stop()
,会发生什么
代码如下:
package com.google.android.apps.iosched.util;
import com.google.android.apps.analytics.GoogleAnalyticsTracker;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Log;
/**
* Helper singleton class for the Google Analytics tracking library.
*/
public class AnalyticsUtils {
private static final String TAG = "AnalyticsUtils";
GoogleAnalyticsTracker mTracker;
private Context mApplicationContext;
/**
* The analytics tracking code for the app.
*/
// TODO: insert your Analytics UA code here.
private static final String UACODE = "INSERT_YOUR_ANALYTICS_UA_CODE_HERE";
private static final int VISITOR_SCOPE = 1;
private static final String FIRST_RUN_KEY = "firstRun";
private static final boolean ANALYTICS_ENABLED = true;
private static AnalyticsUtils sInstance;
/**
* Returns the global {@link AnalyticsUtils} singleton object, creating one if necessary.
*/
public static AnalyticsUtils getInstance(Context context) {
if (!ANALYTICS_ENABLED) {
return sEmptyAnalyticsUtils;
}
if (sInstance == null) {
if (context == null) {
return sEmptyAnalyticsUtils;
}
sInstance = new AnalyticsUtils(context);
}
return sInstance;
}
private AnalyticsUtils(Context context) {
if (context == null) {
// This should only occur for the empty Analytics utils object.
return;
}
mApplicationContext = context.getApplicationContext();
mTracker = GoogleAnalyticsTracker.getInstance();
// Unfortunately this needs to be synchronous.
mTracker.start(UACODE, 300, mApplicationContext);
Log.d(TAG, "Initializing Analytics");
// Since visitor CV's should only be declared the first time an app runs, check if
// it's run before. Add as necessary.
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mApplicationContext);
final boolean firstRun = prefs.getBoolean(FIRST_RUN_KEY, true);
if (firstRun) {
Log.d(TAG, "Analytics firstRun");
String apiLevel = Integer.toString(Build.VERSION.SDK_INT);
String model = Build.MODEL;
mTracker.setCustomVar(1, "apiLevel", apiLevel, VISITOR_SCOPE);
mTracker.setCustomVar(2, "model", model, VISITOR_SCOPE);
// Close out so we never run this block again, unless app is removed & =
// reinstalled.
prefs.edit().putBoolean(FIRST_RUN_KEY, false).commit();
}
}
public void trackEvent(final String category, final String action, final String label,
final int value) {
// We wrap the call in an AsyncTask since the Google Analytics library writes to disk
// on its calling thread.
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
try {
mTracker.trackEvent(category, action, label, value);
Log.d(TAG, "iosched Analytics trackEvent: "
+ category + " / " + action + " / " + label + " / " + value);
} catch (Exception e) {
// We don't want to crash if there's an Analytics library exception.
Log.w(TAG, "iosched Analytics trackEvent error: "
+ category + " / " + action + " / " + label + " / " + value, e);
}
return null;
}
}.execute();
}
public void trackPageView(final String path) {
// We wrap the call in an AsyncTask since the Google Analytics library writes to disk
// on its calling thread.
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
try {
mTracker.trackPageView(path);
Log.d(TAG, "iosched Analytics trackPageView: " + path);
} catch (Exception e) {
// We don't want to crash if there's an Analytics library exception.
Log.w(TAG, "iosched Analytics trackPageView error: " + path, e);
}
return null;
}
}.execute();
}
/**
* Empty instance for use when Analytics is disabled or there was no Context available.
*/
private static AnalyticsUtils sEmptyAnalyticsUtils = new AnalyticsUtils(null) {
@Override
public void trackEvent(String category, String action, String label, int value) {}
@Override
public void trackPageView(String path) {}
};
}
package com.google.android.apps.iosched.util;
导入com.google.android.apps.analytics.GoogleAnalyticsTracker;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.os.AsyncTask;
导入android.os.Build;
导入android.preference.PreferenceManager;
导入android.util.Log;
/**
*Google Analytics跟踪库的Helper singleton类。
*/
公共类分析工具{
私有静态最终字符串TAG=“AnalyticsUtils”;
GoogleAnalyticsTracker mTracker;
私有上下文映射应用上下文;
/**
*应用程序的分析跟踪代码。
*/
//TODO:在此处插入您的分析UA代码。
私有静态最终字符串UACODE=“在此处插入您的分析代码”;
私有静态final int_SCOPE=1;
私有静态最终字符串FIRST\u RUN\u KEY=“firstRun”;
私有静态最终布尔分析\u启用=真;
私有静态分析软件;
/**
*返回全局{@link AnalyticsUtils}单例对象,必要时创建一个。
*/
公共静态分析工具getInstance(上下文){
如果(!ANALYTICS_已启用){
返回sEmptyAnalyticsUtils;
}
if(sInstance==null){
if(上下文==null){
返回sEmptyAnalyticsUtils;
}
sInstance=新的分析工具(上下文);
}
回归承诺;
}
专用分析工具(上下文){
if(上下文==null){
//这应该只对空的Analytics utils对象发生。
返回;
}
mApplicationContext=context.getApplicationContext();
mTracker=GoogleAnalyticsTracker.getInstance();
//不幸的是,这需要同步。
mTracker.start(UACODE,300,MapApplicationContext);
Log.d(标签“初始化分析”);
//由于访客简历只应在应用程序第一次运行时声明,请检查
//以前运行过。请根据需要添加。
SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(MapApplicationContext);
final boolean firstRun=prefs.getBoolean(FIRST_RUN_键,true);
如果(首次运行){
Log.d(标签“Analytics firstRun”);
字符串apiLevel=Integer.toString(Build.VERSION.SDK\u INT);
字符串模型=Build.model;
mTracker.setCustomVar(1,“apiLevel”,apiLevel,访客范围);
mTracker.setCustomVar(2,“模型”,模型,访客范围);
//关闭,这样我们就不会再运行此块,除非应用程序被删除&=
//重新安装。
prefs.edit().putBoolean(第一个运行键,false).commit();
}
}
public void trackEvent(最终字符串类别、最终字符串操作、最终字符串标签、,
最终整数值){
//由于Google Analytics库写入磁盘,因此我们将调用包装在一个AsyncTask中
//在它的调用线程上。
新建异步任务(){
@凌驾
受保护的空位背景(空位…空位){
试一试{
mTracker.trackEvent(类别、动作、标签、值);
Log.d(标记“iosched Analytics trackEvent:”
+类别+“/”+动作+“/”+标签+“/”+值);
}捕获(例外e){
//如果出现分析库异常,我们不希望崩溃。
Log.w(标记“iosched Analytics trackEvent error:”
+类别+“/”+动作+“/”+标签+“/”+值,e);
}
返回null;
}
}.execute();
}
public void trackPageView(最终字符串路径){
//由于Google Analytics库写入磁盘,因此我们将调用包装在一个AsyncTask中
//在它的调用线程上。
新建异步任务(){
@凌驾
受保护的空位背景(空位…空位){
试一试{
mTracker.trackPageView(路径);
Log.d(标记“iosched Analytics trackPageView:+path”);
}捕获(例外e){
//如果出现分析库异常,我们不希望崩溃。
Log.w(标记“iosched Analytics trackPageView错误:”+path,e);
}
返回null;
}
}.execute();
}
/**
*当分析被禁用或没有可用上下文时使用的空实例。
*/
私有静态分析结果sEmptyAnalyticsUtils=新分析结果(空){
@凌驾
public void trackEvent(字符串类别、字符串操作、字符串标签、int值){}
@凌驾
public void trackPageView(字符串路径){}
};
}
如您所见,它们以5分钟的间隔启动跟踪器
mTracker.start(UACODE,300,mApplicationContext)
但永远不要调用mTracker.stop()
方法。会有什么后果吗?这是否意味着即使在应用程序关闭或停止时,服务也会发送数据?应该不会有太多情况发生——当你关闭或停止应用程序时,即使它仍在后台,并且不再有活动,也不会收集新数据(因为没有人调用track()再也没有了。所以我认为明确停止跟踪器是一种很好的方式。EasyTracker-我在google analytics博客中找到了它。在那里他们描述了一个EasyTracker类,它包装了普通的跟踪器类,并具有一些不错的功能
- 通过资源文件进行配置(无需编码)
- 每一个