Google Analytics V2 - IllegalStateException - 我可以在onCreate()而不是onStart()中初始化

Boo*_*ger 3 android google-analytics

我正在使用新的Google Analytics Beta for Mobile.我运行代码时有时遇到以下异常:

E/AndroidRuntime(29101):java.lang.RuntimeException:无法启动活动ComponentInfo {com.wsoft/com.wsoft.ui.AppActivity}:java.lang.IllegalStateException:您必须调用EasyTracker.getInstance().setContext(context )或调用getTracker()之前的startActivity(activity)E/AndroidRuntime(29101):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)E/AndroidRuntime(29101):在android.app.ActivityThread.handleLaunchActivity(ActivityThread) .java:2084)E/AndroidRuntime(29101):在android.app.ActivityThread.access $ 600(ActivityThread.java:130)E/AndroidRuntime(29101):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java: 1195)E/AndroidRuntime(29101):在android.os.Handler.dispatchMessage(Handler.java:99)E/AndroidRuntime(29101):在android.os.Looper.loop(Looper.java:137)E/AndroidRuntime( 29101):在android.app.ActivityThread.main(ActivityThread.java:4745)E/AndroidRuntime(29101):at java.lang.reflect.Method.invokeNative(Native Method)E/AndroidRuntim e(29101):at java.lang.reflect.Method.invoke(Method.java:511)E/AndroidRuntime(29101):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786) E/AndroidRuntime(29101):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)E/AndroidRuntime(29101):at dalvik.system.NativeStart.main(Native Method)E/AndroidRuntime(29101) ):

引起:java.lang.IllegalStateException:在调用getTracker()E/AndroidRuntime(29101):com.google.analytics.tracking.android之前,必须调用EasyTracker.getInstance().setContext(context)或startActivity(activity). EasyTracker.getTracker(EasyTracker.java:113)E/AndroidRuntime(29101):at com.wsoft.ui.AppActivity.setupApp(AppActivity.java:425)E/AndroidRuntime(29101):at com.wsoft.ui.AppActivity.的onCreate(AppActivity.java:121)

为了设置分析,我在onStart()方法(每个文档)中初始化了EasyTracker,如下所示:

public void onStart() {
        super.onStart();
        EasyTracker.getInstance().activityStart(this); 
    }
Run Code Online (Sandbox Code Playgroud)

IllegalStateException被抛出代码,在我的onCreate()方法中执行 - 当然在onStart()之前运行 - 所以我理解为什么抛出它.

我正在考虑在onCreate()中移动EasyTracker初始化,而不是onStart().

我不应该这样做的任何理由?有关如何设置EasyTracker更可靠的任何建议(关于活动生命周期?)

或者,如果有人对我在使用之前如何确保EasyTracker初始化有任何好的建议(这会导致FC,这显然是一件坏事.

小智 6

实际上,如果您想使用自动屏幕跟踪(EasyTracker),文档会说在onStart中进行初始化,这类似于EasyTracker的旧版本,它也做了同样的事情,但您可以从TrackedActivity等跟踪版本扩展您的类.但文档确实说明,如果你正在进行任何手动屏幕跟踪,那么你确保在调用trackEvent之前调用setContext.文档有点稀疏,有关如何执行此操作的详细信息.无论如何,我只是创建了我自己的trackEvent和trackView类,它们将上下文作为参数,以确保始终设置它.

public static void trackView(Context ctx, String sScreenName){
    EasyTracker.getInstance().setContext(ctx);
    EasyTracker.getTracker().trackView(sScreenName);

}
public static void trackEvent(Context ctx, String sCategory, String sAction, String sLabel, Long lOptVal){
    EasyTracker.getInstance().setContext(ctx);
    EasyTracker.getTracker().trackEvent(sCategory, sAction, sLabel, lOptVal);
}
Run Code Online (Sandbox Code Playgroud)

为我解决了这个问题.希望这可以帮助.