簡體   English   中英

java.lang.RuntimeException:無法創建服務

[英]java.lang.RuntimeException: Unable to create service

java.lang.IllegalStateException: Extra call to initialize analytics trackers
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2801)
at android.app.ActivityThread.access$1800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.IllegalStateException: Extra call to initialize analytics trackers
at com.apps.skytek.notify.AnalyticsTrackers.initialize(AnalyticsTrackers.java:32)
at com.apps.skytek.notify.NotificationService.onCreate(NotificationService.java:51)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2791)
... 9 more

我怎么能解決這個崩潰? 我知道這是由谷歌分析引起的,但我不明白為什么我遵循谷歌的正確指南如何實現它!

分析類

   public void onCreate() {

    super.onCreate();
    context = getApplicationContext();
    mNotificationManager = (NotificationManager) getSystemService("notification");
    mInstance = this;
    AnalyticsTrackers.getInstance().get(AnalyticsTrackers.Target.APP);
    AnalyticsTrackers.initialize(this);


}

public static synchronized NotificationService getInstance() {
    return mInstance;
}

public synchronized Tracker getGoogleAnalyticsTracker() {
    AnalyticsTrackers analyticsTrackers = AnalyticsTrackers.getInstance();
    return analyticsTrackers.get(AnalyticsTrackers.Target.APP);
}

/***
 * Tracking screen view
 *
 * @param screenName screen name to be displayed on GA dashboard
 */
public void trackScreenView(String screenName) {
    Tracker t = getGoogleAnalyticsTracker();

    // Set screen name.
    t.setScreenName(screenName);

    // Send a screen view.
    t.send(new HitBuilders.ScreenViewBuilder().build());

    GoogleAnalytics.getInstance(this).dispatchLocalHits();
}

/***
 * Tracking exception
 *
 * @param e exception to be tracked
 */
public void trackException(Exception e) {
    if (e != null) {
        Tracker t = getGoogleAnalyticsTracker();

        t.send(new HitBuilders.ExceptionBuilder()
                        .setDescription(
                                new StandardExceptionParser(this, null)
                                        .getDescription(Thread.currentThread().getName(), e))
                        .setFatal(false)
                        .build()
        );
    }
}

/***
 * Tracking event
 *
 * @param category event category
 * @param action   action of the event
 * @param label    label
 */
public void trackEvent(String category, String action, String label) {
    Tracker t = getGoogleAnalyticsTracker();

    // Build and send an Event.
    t.send(new HitBuilders.EventBuilder().setCategory(category).setAction(action).setLabel(label).build());
}

所以我初始化跟蹤器和跟蹤器屬性是在一個單獨的XML文件中,但它的行為就像我正在嘗試初始化它兩次或者其他東西而且我不太確定它為什么會發生! 謝謝你的幫助!

嘗試將initialize移動到app類,因此它將在應用程序生命周期中調用一次。

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        AnalyticsTrackers.initialize(this);
    }
}

您需要將跟蹤器實例初始化為onCreate方法。

AnalyticsApplication application = (AnalyticsApplication) getApplication();
myTracker = application.getDefaultTracker();

然后重寫onResume方法以設置跟蹤器。

myTracker.setScreenName("ScreenName" + name);
myTracker.send(new HitBuilders.ScreenViewBuilder().build());

initialize方法檢查變量mInstance是否為null,如果不是,則拋出異常。 好吧,你打破你的程序,因為你在初始化之前給mInstance一個非null值。 不要那樣做。

看看你自己的代碼:

mInstance = this; //Don't do that
AnalyticsTrackers.getInstance().get(AnalyticsTrackers.Target.APP);
AnalyticsTrackers.initialize(this); //☠

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM