ARTS-8

109 阅读2分钟

A

106. Construct Binary Tree from Inorder and Postorder Traversal

与上一题如出一辙,重点还是要知道递归的条件和每次递归时,中序序列和后序序列的边界。

R

Understand How View Renders in Android I

★★★★☆

文章较长,分为 I 和 II 两部分

栅格化是将字符串、按钮或形状等变成屏幕上纹理中像素的过程,这是一个耗时操作,GPU 就是用来加速该过程的。

CPU 将数据提供给 GPU 才能显示到屏幕上,数据从 CPU 传输到 GPU 的过程通过 OpenGL ES 完成。整体可以化为两个阶段:1、一个对象(例如一个按钮)需要先经过 CPU 转换成多边形和纹理(polygons and textures);2、再将数据传输到 GPU 进行栅格化(rasterize)。

这两个过程都是耗时操作,所以一个性能优化的方向是,将尽可能多的数据放到 GPU 上,并将其保留尽可能长时间的引用而无需修改。

当一个 View 需要被创建时,一个展示列表(Display List)也随之被创建,Display List 包含了View 被绘制的所有信息。当 View 要被显示出来,就需要将 Display List 的绘制命令提交到 GPU。如果 View 的内容或大小发生变化,则需要重新创建 Display List 并执行。单一的 View 还好,但是 View 的变化往往带动整个 View 树的变化,此时就会影响性能。

因此,尽量保持“平面视图层次结构“,以减少相互依赖造成的影响。

T

1、getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

屏幕常亮配置在 onCreate 里不生效,要设置在 onResume 里

2、如果某 Activity(假设叫 XActivity) 自身是 SingleTop 或 SingleTask 的,那么在该 Activity 内部执行下面代码效果是不同的:

// ① 先 finish,再启动            
finish()
startActivity(Intent(this, XActivity::class.java))

// ② 先启动,再 finish
startActivity(Intent(this, XActivity::class.java))
finish()

①的效果是:成功启动了一个新的 Activity(没错,是新的,虽然 singleTop,但是因为先 finish了,后面又重建了一个 XActivity,并且执行了 onCreate)

②的效果是:没有启动成功,返回到上一个 Activity(新页面启动时,因为是 SingleTop 的,复用了 Activity(并没再重新执行 onCreate),紧接着又执行 finish,把页面关掉了)

S

《ViewStub 原理》