ANR执行服务com.example.app/com.google.android.gms.analytics.AnalyticsService

时间:2015-06-23 06:34:13

标签: android google-analytics

有时在长时间不使用我的应用程序后,当我尝试打开它时,我得到一个ANR。在谷歌播放控制台中,我得到以下内容:

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

显然问题出在AnalyticsService。但是当我的设备连接到我的电脑时,我无法重现ANR。我在分析帐户中看不到ANR。

这是我的应用类:

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

然后在我的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());
}

可能是什么原因?

1 个答案:

答案 0 :(得分:-2)

由于活动生命周期方法在UI线程上运行。确保将可能需要很长时间的操作与后台线程区分开来。特别是sendScreenStat和跟踪器创建在后台线程(AsyncTask或专用线程)上运行。 在此处查看更多详细信息:http://blog.akquinet.de/2010/02/17/android-activities-the-predominance-of-the-ui-thread/