当我们打开Android应用程序时,在主UI线程上执行了哪些操作

时间:2016-09-07 06:19:01

标签: java android multithreading android-fragments

我有一个像这样的TabLayout的Android应用程序:

enter image description here

每个标签都会加载一个片段,还有6个这样的标签。

它还有这样的导航抽屉:

enter image description here

点击选项后,新活动将被打开。

工具栏上的按钮也很少,点击新的活动即可打开。

该应用还有像这样的Sliding up面板:

enter image description here

问题在于,当我打开应用程序时,几秒钟后它会显示我:

enter image description here

当这个到来时,我可以在logcat中看到

  

应用程序可能在其主线程上做了太多工作

给出了here

的解决方案

(此消息仅在某些设备上出现)当我们点击“确定”然后应用程序继续运行但几秒后再次弹出相同的消息。我注意到还有一件事,当我让应用程序打开更长时间后,这条消息不会出现,应用程序运行顺畅。

我想知道当我们打开Android应用程序时,其他活动是否也会加载到主UI线程上运行?

我认为当我们打开应用程序时,ViewPager中使用的片段将被加载到主UI线程上。

将片段添加到ViewPager的代码如下:

tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

        viewPagerAdapter.addFragments(new HomeFragment(), "Home");
        viewPagerAdapter.addFragments(new TrendingFragment(), "Best Deals");
        viewPagerAdapter.addFragments(new HomeServicesFragment(), "Home Services");
        viewPagerAdapter.addFragments(new EntertainmentFragment(), "Entertainment"); 
        viewPagerAdapter.addFragments(new FashionFragment(), "Fashion"); 
        viewPagerAdapter.addFragments(new VehicleServicesFragment(), "Vehicle Services"); 
        viewPagerAdapter.addFragments(new OthersFragment(), "Other Services"); 

        viewPager.setAdapter(viewPagerAdapter);
        tabLayout.setupWithViewPager(viewPager);

另外我想知道我是否可以使用AsyncTask来加载这个TabLayout?我再次不知道在上面的代码中哪一行负责UI更新。我不确定这样做是否有助于解决问题?

1 个答案:

答案 0 :(得分:0)

我收到消息的问题

  

应用程序可能在其主线程上做了太多工作

已经解决了,现在我想在这里写一下。问题出现在drawables图像中,我的图像尺寸较小但分辨率较高,并且在ViewPager中使用了该图像。在改变图像时,问题就消失了。

好的,上面我又问了一个问题:

  

我想知道其他活动是否也被加载以运行   我们打开Android应用程序时的主UI线程?

这个问题可能听起来很少,因为我们知道每个Activity都有自己的生命周期,并根据它创建和销毁。因此,当应用程序加载时,只有具有类别为LAUNCHER的intent-filter的主活动才会被加载。我问了这个问题,因为我在其他SharedPreferences的主UI线程上创建了许多Activities个文件。所以我认为创建SharedPreferences文件可能是问题的原因之一。