android面试题整理

口头BB篇

a.不需要记全,理解后整理成自己的话,问起来能答个123即可,在答上的基础上,再主动延伸一些实例,或文章中的二级问题。如别人问内存泄露是怎么引起的,在答出理由后,主动举出一些实例。

b.会回答到的常用英语单词一定要熟读,回答的时候飙英语单词一个要有底气,别一个onMeasure都读错0.0。

1.什么是多态?

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为

方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic binding)
多态存在的三个必要条件
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。
多态的实现方式
方式一:重写:
方式二:接口
方式三:抽象类和抽象方法
运行时多态
继承父类和实现接口时,父类引用指向子类对象。

编译时多态(非严格意义多态)
其实从Java多态的定义来说 编译多态并不能真正算做多态,编译多态即方法重载,Java在编译时能够确定执行重载方法中的哪一个。
总结
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用);
四、变量不能被重写(覆盖),”重写”的概念只针对方法,如果在子类中”重写”了父类中的变量,那么在编译时会报错。

2.内存泄露的原因,和具体例子
内存泄露的根本原因:长生命周期的对象持有短生命周期的对象。短周期对象就无法及时释放。

部分例子
a.static关键字(静态集合类,单例) b.各种数据链接没有关闭 c.bitmap没调用recycle()等等

3.如何避免OOM

A.OOM是什么 首先OOM是什么?
当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后
这就会抛出 OutOfMemoryException 也就是OOM

B. 如何避免
减少内存对象的占用(不需记全,优先记忆图片处理的几个)

I.ArrayMap/SparseArray代替hashmap

II.避免在android里面使用Enum

III.减少bitmap的内存占用

inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。
IV.减少资源图片的大小,过大的图片可以考虑分段加载

内存对象的重复利用

大多数对象的复用,都是利用对象池的技术。

I.listview/gridview/recycleview contentview的复用

II.inBitmap 属性对于内存对象的复用ARGB_8888/RBG_565/ARGB_4444/ALPHA_8

这个方法在某些条件下非常有用,比如要加载上千张图片的时候。

III.避免在ondraw方法里面 new对象

IV.StringBuilder 代替+

4.ANR是什么?如何避免?
Application Not Responding
也就是在规定的时间内,没有响应。
三种类型:

1). KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应

2). BroadcastTimeout(10 seconds) –BroadcastReceiver在特定时间内无法处理完成

3). ServiceTimeout(20 seconds) –小概率类型 Service在特定的时间内无法处理完成

为什么会超时:事件没有机会处理 & 事件处理超时

怎么避免ANR

ANR的关键
是处理超时,所以应该避免在UI线程,BroadcastReceiver 还有service主线程中,处理复杂的逻辑和计算
而交给work thread操作。
1)避免在activity里面做耗时操作,oncreate & onresume
2)避免在onReceiver里面做过多操作
3)避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。
4)尽量使用handler来处理UI thread & workthread的交互。

如何调查并解决ANR
1:首先分析log
2: 从trace.txt文件查看调用stack.
3: 看代码
4:仔细查看ANR的成因(iowait?block?memoryleak?)

5.如何捕获全局未捕获的异常
1.记忆勾——–全局首先想到application里面
2.关键是实现Thread.UncaughtExceptionHandler
然后是在application的oncreate里面注册。

//待更新

8.描述一下 android 的系统架构

6.Devik 进程,linux 进程,线程的区别
6.android线程间通讯

7.进程间通讯

8.线程同步的异步

9.请介绍下Android的数据存储方式。

10.动画

11.四大组件

11.启动模式

12.组件之间的通讯

//待更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值