2015-06-23 22 views
6

Czasami po długim okresie nie używania mojej aplikacji, gdy próbuję ją włączyć, otrzymuję ANR. W konsoli Google Play pojawia się następujący:ANR Wykonanie usługi com.example.app/com.google.android.gms.analytics.AnalyticsService

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

Oczywiście problem jest w AnalyticsService. Ale nie mogłem odtworzyć ANR, gdy moje urządzenie jest podłączone do mojego komputera. I nie widzę ANR na koncie analitycznym.

To moja klasa Zastosowanie:

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(); 
    } 
} 

I wtedy w mojej klasie BaseActivity:

@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()); 
} 

Co może być przyczyną?

Odpowiedz

-2

Ponieważ metody cyklu życia aktywności są uruchamiane w wątku interfejsu użytkownika. upewnij się, że różni operacje, które mogą zająć dużo czasu w wątkach tła. w szczególności sendScreenStat i tworzenie trackera do uruchomienia w tle wątku (AsyncTask lub dedykowany wątek). Zobacz więcej szczegółów tutaj: http://blog.akquinet.de/2010/02/17/android-activities-the-predominance-of-the-ui-thread/

+4

Dziękuję za odpowiedź. Zrobiłbym to, gdybym nie widział przewodnika z Androidem od samego Google'a: https://developers.google.com/analytics/devguides/collection/android/v4/#tracking-methods W szczególności mówią: "getInstance (Context) jest bezpieczny dla wątków i może być wywołany z dowolnego wątku". Właściwie używam ich próbek kodu w moim projekcie, więc spodziewam się, że działa poprawnie. – serg66