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

ser*_*g66 6 android google-analytics

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

ANR Executing service my.site.app/com.google.android.gms.analytics.AnalyticsService
Run Code Online (Sandbox Code Playgroud)

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

这是我的Application类:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的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());
}
Run Code Online (Sandbox Code Playgroud)

可能是什么原因?

小智 -2

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

  • 谢谢你的回答。如果我没有看到谷歌本身的android分析指南,我就会这么做:https://developers.google.com/analytics/devguides/collection/android/v4/#tracking-methods 具体来说,他们说:“ getInstance(Context) 是线程安全的,可以从任何线程调用”。实际上,我在我的项目中使用了他们的代码示例,所以我希望它能够正常工作。 (4认同)