如果don';Android Google Analytics中的t call stop()函数?

如果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

我查看了的代码,注意到他们没有在GoogleAnalytics的实例上调用
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类,它包装了普通的跟踪器类,并具有一些不错的功能

  • 通过资源文件进行配置(无需编码)
  • 每一个