2015-06-23 12 views
6

Manchmal nach langen Zeiträumen, in denen ich meine App nicht benutze, wenn ich versuche, sie einzuschalten, bekomme ich einen ANR. In der Google Play-Konsole erhalte ich folgendes:ANR Executing service com.beispiel.app/com.google.android.gms.analytics.AnalyticsService

ANR Executing service my.site.app/com.google.android.gms.analytics.AnalyticsService 

Offensichtlich ist das Problem in der AnalyticsService. Aber ich konnte den ANR nicht reproduzieren, solange mein Gerät an meinen Computer angeschlossen ist. Und ich sehe die ANR nicht im Analytics-Konto.

Das ist meine Anwendungsklasse:

public class BaseApp extends Application { 
    public static GoogleAnalytics analytics; 
    public static Tracker tracker; 

    @Override 
    public void onCreate() { 
     analytics = GoogleAnalytics.getInstance(this); 
     analytics.setLocalDispatchPeriod(1800); 
     analytics.setDryRun(Constants.IS_DEBUG); 
     GoogleAnalytics.getInstance(this).getLogger().setLogLevel(Logger.LogLevel.VERBOSE); 

     tracker = analytics.newTracker(Constants.GOOGLE_ANALYTICS_TRACKER_ID); 
     tracker.enableExceptionReporting(true); 
     tracker.enableAdvertisingIdCollection(true); 
     tracker.enableAutoActivityTracking(true); 

     super.onCreate(); 
    } 
} 

Und dann in meiner BaseActivity Klasse:

@Override 
public void onStart() { 
    super.onStart(); 

    sendScreenStat(); 
} 

protected String getScreenStatName() { 
    return getTitle().toString(); 
} 

private void sendScreenStat() { 
    BaseApp.tracker.setScreenName(getScreenStatName()); 
    BaseApp.tracker.send(new HitBuilders.ScreenViewBuilder().build()); 
} 

Was könnte die Ursache sein?

Antwort

-2

Die Aktivitätslebenszyklusmethoden werden im UI-Thread ausgeführt. Stellen Sie sicher, dass Vorgänge, die Hintergrundthreads erfordern, sehr unterschiedlich sind. speziell die sendScreenStat und die Tracker-Erstellung, die im Hintergrund-Thread (AsyncTask oder dedizierter Thread) ausgeführt werden sollen. Weitere Details finden Sie hier: http://blog.akquinet.de/2010/02/17/android-activities-the-predominance-of-the-ui-thread/

+4

Vielen Dank für die Antwort. Ich hätte das getan, wenn ich den Android Analytics Guide nicht von Google selbst gesehen hätte: https://developers.google.com/analytics/devguides/collection/android/v4/#tracking-methods Insbesondere sagen sie: "getInstance (Context) ist threadsicher und kann von jedem Thread aufgerufen werden". Eigentlich verwende ich ihre Code-Beispiele in meinem Projekt, also erwarte ich, dass es richtig funktioniert. – serg66