2015-06-23 12 views
6

A volte, dopo lunghi periodi di non utilizzo della mia app quando provo ad accenderla, ottengo un ANR. Nella console di Google Play ottengo il seguente:ANR Esecuzione servizio com.example.app/com.google.android.gms.analytics.AnalyticsService

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

Ovviamente il problema è nel AnalyticsService. Ma non ho potuto riprodurre l'ANR mentre il mio dispositivo è collegato al mio computer. E non vedo l'ANR nell'account analitico.

Questa è la mia classe di applicazione:

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

E poi nella mia classe 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()); 
} 

Quale potrebbe essere la causa?

risposta

-2

Poiché i metodi del ciclo di vita dell'attività vengono eseguiti sul thread dell'interfaccia utente. assicurati di differenziare le operazioni che potrebbero richiedere molto tempo ai thread in background. in particolare sendScreenStat e la creazione del tracker da eseguire sul thread in background (AsyncTask o thread dedicato). Vedere ulteriori dettagli qui: http://blog.akquinet.de/2010/02/17/android-activities-the-predominance-of-the-ui-thread/

+4

Grazie per la risposta. L'avrei fatto se non avessi visto la guida di Android Analytics dal google stesso: https://developers.google.com/analytics/devguides/collection/android/v4/#tracking-methods In particolare, dicono: "getInstance (Context) è thread-safe e può essere chiamato da qualsiasi thread". In realtà, io uso i loro campioni di codice nel mio progetto, quindi mi aspetto che funzioni correttamente. – serg66

Problemi correlati