作家
登录

用两张图告诉你,为什么你的App会卡顿?

作者: 来源: 2017-06-01 08:56:06 阅读 我要评论

用两张图告诉你,为什么你的App会卡顿?

有什么料?

大年夜这篇文┞仿中你能获得这些料:

  • 知道setContentView()之后产生了什么?
  • 知道Android毕竟是如安在屏幕上显示我们期望的画面的?
  • 对Android的视图架构有整体把握。
  • 学会大年夜根源处罚析画面卡顿的原因。
  • 控制若何编写一个流畅的App的技能。
  • 大年夜源码中进修Android的细想。
  • 收成两张克己图,赞助你懂得Android的视图架构。

大年夜setContentView()说起

  1. public class AnalyzeViewFrameworkActivity extends Activity { 
  2.   @Override 
  3.   protected void onCreate(Bundle savedInstanceState) { 
  4.     super.onCreate(savedInstanceState); 
  5.     setContentView(R.layout.activity_analyze_view_framwork); 
  6.   } 
  7.  

膳绫擎这段代码想必Androider们大年夜都已经不克不及再熟悉的更多了。然则你知道如许写了之后产生什么了吗?这个构造到底被添加到哪了?我的天,常识点来了!

可能很多同窗也知道这个构造是被放到了一个叫做DecorView的父构造里,然则我照样要再说一遍。且看下图

这个图可能和伙伴们在书上或者网上常见的不太一样,为什么不太一样呢?因为是我本身画的,哈哈哈...

下面就来看着图捋一捋Android最根本的视图框架。

PhoneWindow

估计很多同窗都知道,每一个Activity都拥有一个Window对象的实例。这个实例实际是PhoneWindow类型的。那么PhoneWindow大年夜名字很轻易看出,它应当是Window的儿子(即子类)!

常识点:每一个Activity都有一个PhoneWindow对象。

那么,PhoneWindow有什么竽暌姑呢?它在Activity充当什么角色呢?下面我就姑且把PhoneWindow等同于Window虫豸呼吧。

  1. public void setWindowManager(WindowManager wm,  
  2.     IBinder appToken,  
  3.     String appName,  
  4.     boolean hardwareAccelerated) { 
  5.         ... 
  6.         if (wm == null) { 
  7.             wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); 
  8.             //获取了一个WindowManager 
  9.         } 
  10.         mWindowManager = ((WindowManagerImpl)wm).createLocalWindowManager(this); 
  11.         //经由过程这里我们可以知道,膳绫擎获取到的wm实际是WindowManagerImpl类型的。 
  12.     }  

经由过程膳绫擎的介绍,我们已经知道了Window中有负责承载构造的DecorView,有负责治理的WindowManager(事实上它只是个代劳,后面会讲它代劳的是谁)。

DecorView

前面提到过,在Activity的onCreate()中经由过程setContentView()设置的构造实际是被放到DecorView中的。我们在图中找到DecorView。

大年夜图中可以看到,DecorView持续了FrameLayout,并且一般情况下,它会在先添加一个预设的构造。比如DecorCaptionView,它是大年夜上到下放置本身的子构造的,相当于一个LinearLayout。平日它会有一个标题栏,然后有一个容纳内容的mContentRoot,这个构造的类型视情况而定。我们欲望显示的构培养是放到了mContentRoot中。

常识点:经由过程setContentView()设置的构造是被放到DecorView中,DecorView是视图树的最顶层。

WindowManager

抽出空余时光写文┞仿分享须要动力,还请各位看官动动小手点个赞,鼓励下喽😄

前面已经提到过,WindowManager在Window中具有很重要的感化。我们先在图中找到它。这里须要先解释一点,在PhoneWindow中的mWindowManager实际是WindowManagerImpl类型的。WindowManagerImpl天然就是接口WindowManager的一个实现类喽。这一点是我没有在图中反竽暌钩的。

 1/10    1 2 3 4 5 6 下一页 尾页

  推荐阅读

  换个角度看看,为什么钓鱼攻击总能成功?

当我第一次收到银行发来的“安然”邮件时,我第一反竽暌功就是这里是否有诈?因为在我看来,它实袈溱是太像垂纶邮件了。这封躺在收件箱里的邮件来源竽暌冠我银行经理的小我邮箱地>>>详细阅读


本文标题:用两张图告诉你,为什么你的App会卡顿?

地址:http://www.17bianji.com/lsqh/35508.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)