阿里Android规范-05-UI与布局

2020-04-27  本文已影响0人  zhongcx

1.避免引发全局layout刷新
【正确】
(1)设置固定的View大小的宽高
(2)通过修改Canvas位置并且调用
(3)通过设置一个是否允许requestLayout的变量,然后重写控件的requestlayout、onSizeChanged方法,判断控件的大小没有改变的情况下,当进入requestLayout的时候,直接返回而不调用super的requestLayout方法
(4)调用View的layout方法修改位置

2.以下关于Activity页面布局的做法
【正确】
(1)尽量少使用ViewGroup嵌套
(2)减少LinearLayout的嵌套层级
(3)同样UI,使用RelativeLayout替代LinearLayout以减少view层级
【错误】
(1)只要实现UI功能,不必关心ViewHirerachy

3.关于ViewHolder的说法
【正确】
(1)getView中需要更新ViewHolder的所有属性
(2)ViewHolder不仅适用于ListView的场景
(3)使用ViewHolder主要是为了避免多次创建view,降低内存占用并提升UI流畅度。
【错误】
(1)ViewHolder仅设置需要更新的属性即可

4.在ListView中加载图片时,需要注意
【正确】
(1)为了UI效率,应该把展示过的图片都缓存起来
(2)做好内存控制,避免内存溢出
(3)做好缓存以及淘汰机制,避免重复创建
(4)当图片不可见后,应该立即释放,避免内存占用过高

5.关于嵌套Fragment的说法
【正确】
(1)使用嵌套Fragment时应注意区分Activity的FragmentManager和宿主Fragment的FragmentManager,否则可能导致错误。
(2)嵌套Fragment的onActivityResult方法可能不会被正常调用
(3)为了避免复杂性和潜在bug,尽量不要使用嵌套Fragment
【错误】
(1)可以在xml文件中定义嵌套Fragment

6.在Activity未初始化完成时,显示PopupWindow或者Dialog会导致如下哪种异常?
【正确】
(1)BadTokenException
【错误】
(1)InflateException
(2)UnsupportedOperationException
(3)lllegaStateException

7.当添加Fragment时,以下做法
【正确】
(1)避免使用FragmentTransaction#commitAllowingstateLoss()
(2)FragmentTransaction#commit()调用时机不对可能会导致java.lang.lllegalStateException
(3)使用FragmentTransaction#commitllowingstateLoss()会导致用户UI状态丢失,降低用户体验
【错误】
(1)在Activity#onSaveInstancestate()方法之后调用FragmentTranscation#commit()没有问题

8.在文本大小设置中,使用以下哪种单位会使显示的字体大小受系统设置里字体大小的影响?
【正确】
(1)sp
【错误】
(1)px
(2)dp
(3)pt

9.以下哪种可能会造成内存问题
【正确】
(1)Application对象中存储大量缓存数据
(2)使用AnimationDrawable加载大量图片
【错误】
(1)使用Adapter时,使用了ViewHolder做缓存
(2)在布局设计时,不能使用Scrollview包裹ListView/GridView/ExpandableListView

10.以下关于使用DialogFragment替换Dialog的说法正确的()
【正确】
(1)DialogFragment可以便利的使用自定义Dialog和系统Dialog
(2)系统 Dialog在屏幕旋转的时候可能会导致内存泄漏
(3)DialogFragment便于代码解耦和复用
(4)DialogFragment可以借助FragmentManager自动管理对话框状态,比如屏幕旋转后Dialog状态的恢复
【错误】
(1)由于系统Dialog是独立于Activity的系统,管理状态复杂,代码量比较多

11.为便于随Activity生命周期管理对话框/弹出浮层的生命周期,推荐使用以下哪种view?
【正确】
(1)DialogFragment
【错误】
(1)PopupWindow
(2)AlertDialog
(3)Dialog

12.关于局部频繁刷新View,如何避免全局重新布局的做法
【正确】
(1)需刷新的View严格指明宽高,比如倒计时组件
(2)使用View#invalidate(int l,int t,int r ,int b)
(3)调用View#layout()方法更新位置,比如弹幕
(4)在某些局部刷新的场景下,强制关闭自定义View#requestLayout功能

13.在( )等组件中使用图片时,应做好图片的缓存,避免始终持有图片导致内存泄露引起的性能问题。建议使用开源或者封装的图片库。
【正确】
(1)ListView
(2)ViewPager
(3)RecyclerView
(4)GirdView

上一篇下一篇

猜你喜欢

热点阅读