TagManagerService引起ANR问题

5
我面临一个问题,我无法解决。当我在第一个活动屏幕上按下back键以转到主窗口时,会出现ANR错误。在我按下back键后,尝试返回应用程序时,出现一个白屏,然后是黑屏。一两分钟后,ANR消息弹出。这与我的gradle play-services有关。
def googlePlayServicesVersion = '9.0.2'


compile "com.google.android.gms:play-services:$googlePlayServicesVersion"
compile "com.google.android.gms:play-services-analytics:$googlePlayServicesVersion"
compile "com.google.android.gms:play-services-auth:$googlePlayServicesVersion"
compile "com.google.android.gms:play-services-vision:$googlePlayServicesVersion"

Starting window AppWindowToken{44f94e90 token=Token{42a85dc8 ActivityRecord{430f4b70 u0 com.ioa***.****/com.******.****.activity.SignUpInTabActivity_ t84}}} timed out

ANR in com.ioa***.****
      PID: 24075
      Reason: Executing service com.ioacom.ioa***.****/com.google.android.gms.tagmanager.TagManagerService
      Load: 4.49 / 4.91 / 5.12
      CPU usage from 5972ms to 0ms ago:
      1.3% 372/adbd: 0.1% user + 1.1% kernel / faults: 406 minor
      1.1% 953/system_server: 0.6% user + 0.5% kernel / faults: 6 minor
      0.1% 1//init: 0% user + 0.1% kernel / faults: 52 minor
      0.3% 1053/com.android.systemui: 0.3% user + 0% kernel / faults: 2 minor
      0.3% 18921/kworker/0:2: 0% user + 0.3% kernel
      0.1% 3/ksoftirqd/0: 0% user + 0.1% kernel
      0.1% 8/rcu_preempt: 0% user + 0.1% kernel
      0.1% 144/mmcqd/0: 0% user + 0.1% kernel
      0% 204/servicemanager: 0% user + 0% kernel
      0% 224/mediaserver: 0% user + 0% kernel
      0% 1097/wpa_supplicant: 0% user + 0% kernel
      0.1% 1749/mpdecision: 0.1% user + 0% kernel
      0% 17052/kworker/u8:7: 0% user + 0% kernel
      0% 20159/kworker/0:3: 0% user + 0% kernel
      0% 24075/com.ioa***.******: 0% user + 0% kernel
      9.3% TOTAL: 2.8% user + 6.2% kernel + 0.1% iowait
      CPU usage from 2824ms to 3341ms later:
      3.8% 953/system_server: 0% user + 3.8% kernel / faults: 1 minor
      3.8% 967/ActivityManager: 0% user + 3.8% kernel
      9% TOTAL: 0% user + 0% kernel + 9% iowait

我的启动器 Activity 应该只在用户第一次进入应用时出现:

public class FirstActivity extends AppCompatActivity {

    public void onCreate() {
        if (userDataAccess.getUserProfile() != null) {
            startDashBoardActivity();
            finish();
        } else if (!preferences.isFirstAccess().get()) {
            startLoginActivity();
        }
    }

} 

我的登录活动:

@EActivity(R.layout.activity_with_tabs_layout)
public class SignUpInTabActivity extends AppCompatActivity {

    @ViewById(R.id.toolbar)
    Toolbar toolbar;

    @ViewById(R.id.tabs)
    TabLayout tabLayout;

    @ViewById(R.id.viewpager)
    ViewPager viewPager;

    private LoginFragment loginFragment;

    @AfterViews
    public void init(){
        setSupportActionBar(toolbar);
        ViewCompat.setElevation(tabLayout, 4);
        if(getSupportActionBar() != null) {
            toolbar.setSubtitleTextColor(ContextCompat.getColor(this, android.R.color.white));
            toolbar.setTitleTextColor(ContextCompat.getColor(this, android.R.color.white));
            toolbar.setTitle(R.string.*****);
            toolbar.setSubtitle(R.string.flavor);
        }
        setupViewPager();
    }

    @UiThread
    public void setupViewPager() {
        loginFragment = LoginFragment_.builder().build();
        ViewPagerTabsAdapter adapter = new ViewPagerTabsAdapter(getSupportFragmentManager());
        adapter.addFragment(loginFragment, getString(R.string.login).toUpperCase());
        adapter.addFragment(SignUpFragment_.builder().build(), getString(R.string.register_user).toUpperCase());
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        loginFragment.onActivityResult(requestCode,resultCode,data);
    }

}

backPress的代码是默认的,我没有覆盖它。 - Lucas Ferraz
而对于标签管理服务呢? - Jossie Calderon
考虑到我们无法看到相关活动的代码,我会假设您正在等待某个pendingResult或类似的阻塞调用(基于标签管理器的使用)。 - Chris Handy
我可以发布活动代码,主要问题是我没有明确使用标签管理器,我认为它与分析一起使用。 - Lucas Ferraz
所有人所能做的就是根据当前展示的内容进行推测。 - Chris Handy
已发布的活动。 - Lucas Ferraz
1个回答

6

似乎是与play-services 9+有关的问题。

我的第一个解决方法是将play-services回滚到8.4.0,然后一切正常了。

我继续寻找解决方案,因为上述方法并不能让我满意,

我发现问题出在“通用play服务”和特定版本之间,我不明白为什么它可以在8.4.0上运行而在9+上却不行。

我的解决方案是删除下面这行代码:

compile "com.google.android.gms:play-services:9.0.2"

保留特定内容(无论问题是什么,这是最好的方式)。

compile "com.google.android.gms:play-services-analytics:9.0.2"
compile "com.google.android.gms:play-services-auth:9.0.2"
compile "com.google.android.gms:play-services-vision:9.0.2" 

它可以正常运行!

我真的想知道为什么错误是 ANR。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接