Android面试题集(三)

image.png

自定义View

自定义View的基本方法

自定义View的最基本的三个方法分别是:onMeasure(),onLayout()、onDraw();View在Activity中显示出来,要经历测量、布局、绘制三个步骤,分别对应三个动作:measure、layout和draw。

  • 测量:onMeasure()决定View的大小;
  • 布局:onLayout()决定View在ViewGroup中的位置;
  • 绘制:onDraw()决定绘制这个View。

自定义控件分类

  • 自定义View:只需要重写onMeasure()和onDraw()
  • 自定义ViewGroup:则只需要重写onMeasure()和onLayout()

View的分类

视图View主要分为两类

类别 解释 特点
单一视图 即一个View,如TextView 不包含子View
视图组 即多个View组成的ViewGroup,如LinearLayout 包含子View

View类简介

  • View类是Android中各种组件的基类,如View是ViewGroup基类
  • VIew表现为显示在屏幕上的各种视图

Android中的UI组件都由View、ViewGroup组成

  • View的构造函数共有4个

AttributeSet与自定义属性

系统自带的View可以在xml中配置属性,对于写的好的自定义View同样可以在xml中配置属性,为了使自定义的View的属性可以在xml中配置,需要以下4个步骤:
1、通过<declare-styleable>为自定义View添加属性
2、在xml中为相应的属性声明属性值
3、在运行时(一般为构造函数)获取属性值
4、将获取到的属性值应用到View

Android坐标系

Android的坐标系定义为:

  • 屏幕的左上角为坐标原点
  • 向右为x轴增大方向
  • 向下为y轴增大方向

位置获取方式

  • View的位置是通过view.getxxx()函数进行获取
  • 与MotionEvent中get()和getRaw()的区别

get():触摸点相对于其所在的组件坐标系的坐标
event.getX();
event.getY();
getRaw():触摸点相对于屏幕默认坐标系的坐标
event.getRawX();
event.getRawY();

MeasureSpec

测量规格,封装了父容器对View的布局上的限制,内部提供了宽高的信息(SpecMode、SpecSize),SpecSize是指在某种SpecMode下的参考尺寸,其中SpecMode有如下三种:

  • UNSPECIFIED 父控件不对你有任何限制,你想要多大给你多大,想上天就上天。这种情况一般用于系统内部,表示一种测量状态。(这个模式主要用于系统内部多次Measure的情形,并不是真的你想要多大最后就真的有多大)
  • EXACTLY 父控件已经知道你所需的精确大小,你的最终大小应该就是这么大。
  • AT_MOST 你的大小不能大于父控件给你指定的size,但具体是多少,得看你自己的实现。
MeasureSpec的意义

通过将SpecMode和SpecSize打包成一个int值可以避免过多的对象内存分配,为了方便操作,其提供了打包/解包方法。

MeasureSpec值的确定

MeasureSpec值到底是如何计算得来的呢?


image.png

子View的MeasureSpec值是根据子View的布局参数(LayoutParams)和父容器的MeasureSpec值计算得来的,具体计算逻辑封装在getChildMeasureSpec()里


查找算法你用过哪些?

  • 查找算法的分类
    1、静态查找和动态查找
    注:静态或者动态查找都是针对查找表而言的。动态表指查找表中有删除和插入操作的表。
    2、无序查找和有序查找
    无序查找:被查找数列有序无序均可;
    有序查找:被查找数列必须为有序数列。

  • 1、顺序查找——复杂度:O(n)
    说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。顺序查找也称为线性查找,属于无需查找算法

  • 2、二分查找——复杂度:O(log2n)
    说明:元素必须是有序的,如果是无序的则要先进行排序操作。也称为是折半查找,属于有序查找算法。

  • 3、插值查找——复杂度:O(log2(log2n))
    说明:基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,差值查找也属于有序查找。
    注意:对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好得多。反之,数组中如果分布非常不均匀,那么插值查找未必使很合适的选择。

  • 4、斐波那契查找——复杂度:O(log2n)
    说明:也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率,同样地,斐波那契查找也属于一种有序查找算法。

  • 5、树表查找之二叉查找树——复杂度:(O(log2n))
    说明:二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值。

  • 6、分块查找
    说明:分块查找又称索引顺序查找,它是顺序查找的一种改进方法。
    7、哈希查找——复杂度:O(1)
    说明:通过Hash表进行查找。

什么是IntentService

  • 一个封装了HandlerThread和Handler的异步框架。
  • 是一种特殊Service,继承自Service,是抽象类,必须创建子类才可以使用。
  • 可用于执行后台耗时的任务,任务执行后会自动停止
  • 具有高优先级(服务的原因),优先级比单纯的线程高很多,适合高优先级的后台任务,且不容易被系统杀死。
  • 启动方式和Service一样。
    (1、startService 启动的服务:主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService;
    2、bindService 启动的服务:该方法启动的服务可以进行通信。停止服务使用unbindService;
    3、startService 同时也 bindService 启动的服务:停止服务应同时使用stepService与unbindService)
  • 可以多次启动,每个耗时操作都会以工作队列的方式在IntentService的onHandleIntent回调方法中执行。
  • 串行执行。

IntentService可以执行大量的耗时操作?

  • 如果只有一个任务,是可以进行耗时操作的。
  • 如果有很多任务,由于内部的HandlerThread是串行执行任务,会导致耗时操作阻塞了后续任务的执行。

Service和IntentService的区别联系

  • Service不是运行在独立的线程,所以不建议在Service中编写耗时的逻辑和操作(必要时,开启独立的线程运行Service),否则会引起ANR。
  • IntentService
    1、可用于执行后台耗时的任务,任务执行后还会自动停止。
    2、具有高优先级,适合高优先级的后台任务,且不容易被系统杀死。
    3、可以多次启动,每个耗时操作都会以工作队列的方式在IntentService的onHandlerIntent回调方法中执行。

你了解Lifecycles吗?

官方解释:用于管理Activity和Fragment的生命周期
其实Lifecycles的功能就是使业务组件能够感知Activity和Fragment的生命周期。

什么是databinding?

  • 概念
    简单来说就是MVVM中ViewModel与Model之间的数据框架
    DataBinding是Google官方发布的一个框架,顾名思义就是数据绑定,是MVVM模式在Android上的一种实现,用于降低布局和逻辑的耦合性使代码逻辑更加清晰。MVVM相对于MVP,其实就是将Presenter层替换成了ViewModel层。DataBinding能够省去我们一直以来的findViewById()步骤,大量减少Activity内的代码,数据能够单向或者多向绑定到layout文件中,有助于防止内存泄漏,而且能自动进行空检测以避免空指针异常
  • 目前不支持以下操作
    1、this
    2、super
    3、new
    4、显示泛型调用
    此外,DataBinding还支持一下几种形式的调用Null Coalescing空合并运算符??会取第一个不为null的值作为返回值


    image.png
  • BindingAdapter
    dataBinding提供了BindingAdapter这个注解用于支持自定义属性,或者是修改原属性。注解值可以是已有的xml属性,例如android:src、android:text等,也可以自定义属性然后在xml中使用。
  • BindingConversion
    dataBinding还支持对数据进行转换,或者进行类型转换

ListView和RecyclerView有什么区别?

  • 区别1
    ListView:只能在垂直方向滑动。
    RecyclerView:支持水平方向滑动,垂直方向滑动,多行多列瀑布流的方式等。
  • 区别2
    ListView:有几个默认的Adapter,分别是ArrayAdapter、CursorAdapter和SimpleCursorAdaper。
    RecyclerView:Adapter需要自己实现。
  • 区别3
    ListView:拥有子Item的监听函数:AdaperView.OnItemClickListener。
    RecyclerView:需要自己实现接口,来实现子Item的点击事件,虽然比较麻烦,但是扩展性好。
  • 区别4
    ListView:并不强制使用ViewHolder,如果要使用,则需要自己定义,如果不使用,ListView每次getView()的时候都需要findViewById,会造成性能下降,滑动卡顿等,所以推荐使用ViewHolder。
    RecyclerView:必须使用ViewHolder。
  • 区别5
    ListView:两级缓存。
    RecyclerView:四级缓存。
  • ListView两级缓存
    1、mActiveViews用于屏幕内ItemView快速重用
    2、mScrapViews用于缓存离开屏幕的ItemView
  • RecyclerView四级缓存
    1、mChangeScrap与mAttachedScrap用于屏幕内ItemView快速重用
    2、mCachedViews默认上线为2,即缓存屏幕外2个ItemView
    3、mViewCacheExtension用户自定义,一般不使用
    4、RecycleViewPool默认上线为5
    缓存对象不同,RecyclerView缓存的是ViewHolder,ListView缓存的是View。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容