优化View层次过深问题,选择哪个布局比较好?(美团)
这道题想考察什么?
- 是否了解View层次过深的问题
- 是否掌握view的UI优化的知识点
考察的知识点
- 如何优化布局层次
- 按需加载View视图怎么实现
考生应该如何回答
第一、布局是Android应用程序重要的一部分,它与用户体验有着直接联系。如果一个布局是糟糕的,它将产生一个消耗内存与低效UI应用程序。优化布局层次,可以使用ConstraintLayout布局实现。嵌套式层次结构和 RelativeLayout(会对其每个子对象重复测量两次)的特性导致性能低下
第二、重点回答优化控件的使用。
- include标签可以在一个布局中引入另外一个布局.如果我们程序的所有界面都有一个公共的部分,这个时候最好的做法就是将这个公共的部分提取到一个独立的布局文件中,然后在每个界面的布局文件中来引用这个公共的布局。为了提高代码的复用性,减少代码;将布局中公共部分抽取供其他layout使用,但可能会导致多余的布局嵌套。
- merge标签是include标签的辅助扩展,为了防止在引用布局文件时产生多余的布局嵌套。
- ViewStub只有加载该布局的时候才占用资源,INVISIBLE状态是不会绘制出来的(ViewStub虽说也是View的一种,但是它没有大小,没有绘制功能,也不参与布局,资源消耗非常低,将它放置在布局当中基本可以认为是完全不会影响性能的)
为何要用 ContentProvider?它与 sql 的实现上有什么区别?
这道题想考察什么?
Android四大组件之一ContentProvider的掌握。
考察的知识点
内容提供者
考生应该如何回答
ContentProvider的作用是为不同的应用之间数据共享,提供统一的接口,我们知道安卓系统中应用内部的数据是对外隔离的,要想让其它应用能使用自己的数据这个时候就用到了ContentProvider。
因此ContentProvider可以看作一种Android不同应用间进行数据共享操作的手段。比如我们自己的应用需要读取通讯录信息或者新增联系人。此时就需要通讯录提供ContentProvider让我们的应用操作其联系人数据。
ContentProvider屏蔽操作数据的细节,用户只需要关心操作数据的uri就可以了不同app之间共享。具体的数据操作 可以是使用Sqlite数据库存取数据,也可以是SharedPreferences,还可以是直接操作文件甚至网络等各种方式完成数据的处理。
而Sql只是一种增删改查数据的方式。
为什么冷启动会有白屏黑屏问题?
这道题想考察什么?
考察同学是否对冷启动流程熟悉。
考生应该如何回答
1.黑白屏产生的原因
当系统加载并启动 App 时,需要耗费相应的时间,这样用户会感觉到当点击 App 图标时会有 “延迟” 现象,为了解决这一问题,Google 的做法是在 App 创建的过程中,先展示一个空白页面,让用户体会到点击图标之后立马就有响应。
如果你的application或activity启动的过程太慢,导致系统的 WindowBackground 没有及时被替换,就会出现启动时白屏或黑屏的情况(显示白屏还是黑屏取决于Theme主题是Dark还是Light)。
2.界面什么时候显示
在 ActivityThread 类的 handleResumeActivity 方法执行时,会调用 wm.addView(decor, l); 这个时候才将view添加到窗口。在这之前 Activity的生命周期方法,onCreate、onStart、onResume都执行了,所以尽可能的不要在这些生命周期方法中执行耗时操作。
3.解决办法
方式一:设置背景透明
方案二:设置为公司logo
4.总结
黑白屏产生的原因主要是因为在界面显示前需要做一些初始化操作,这个是不可避免的,所以我们能做的就是在view显示之前,尽可能的不要做耗时操作,将耗时操作尽可能的放在后面,或者放在子线程。