Andorid的好东西

Android面试题(下)

2018-11-02  本文已影响771人  kjy_112233

Window

Activity、View、Window三者之间的关系?
Window的内部机制
Window有哪几种类型?
Activity创建和Dialog创建过程的异同?

Hander

谈谈消息机制Hander?作用?有哪些要素?流程是怎样的?
为什么系统不建议在子线程访问UI?
一个Thread可以有几个Looper?几个Handler?
如何将一个Thread线程变成Looper线程?Looper线程有哪些特点?
可以在子线程直接new一个Handler吗?那该怎么做?
Message可以如何创建?哪种效果更好,为什么?
这里的ThreadLocal有什么作用?

ThreadLocal类可实现线程本地存储的功能,把共享数据的可见范围限制在同一个线程之内,无须同步就能保证线程之间不出现数据争用的问题,这里可理解为ThreadLocal帮助Handler找到本线程的Looper。

主线程中Looper的轮询死循环为何没有阻塞主线程?
使用Hanlder的postDealy()后消息队列会发生什么变化?

post delay的Message并不是先等待一定时间再放入到MessageQueue中,而是直接进入并阻塞当前线程,然后将其delay的时间和队头的进行比较,按照触发时间进行排序,如果触发时间更近则放入队头,保证队头的时间最小、队尾的时间最大。此时,如果队头的Message正是被delay的,则将当前线程堵塞一段时间,直到等待足够时间再唤醒执行该Message,否则唤醒后直接执行。

线程

Android中还了解哪些方便线程切换的类?
AsyncTask相比Handler有什么优点?不足呢?

Handler的缺点:代码相对臃肿;多任务同时执行时不易精确控制线程。
AsyncTask的优点:创建异步任务更简单,直接继承AsyncTask便可实现后台异步任务的执行和进度的回调更新UI,而无需编写任务线程和Handler实例就能完成相同的任务。

使用AsyncTask需要注意什么?
AsyncTask中的五个核心方法
AsyncTask中使用的线程池大小?
HandlerThread有什么特点?
快速实现子线程使用Handler
IntentService的工作原理?
IntentService的特点?
为何不用bindService方式创建IntentService?
线程池的好处、原理、类型?

线程池的优点:

线程池的原理

线程池的类型

ThreadPoolExecutor的工作策略?
什么是ANR?什么情况会出现ANR?如何避免?在不看代码的情况下如何快速定位出现ANR问题所在?

IPC(跨进程通信)

Android中进程和线程的关系?
为何需要进行IPC?多进程通信可能会出现什么问题?
什么是序列化?Serializable接口和Parcelable接口的区别?为何推荐使用后者?
Android中为何新增Binder来作为主要的IPC方式?
Binder框架中ServiceManager的作用?
Android中有哪些基于Binder的IPC方式?简单对比下?
是否了解AIDL?原理是什么?如何优化多模块都使用AIDL的情况?

Bitmap

加载图片的时候需要注意什么?
LRU算法的原理?
项目中如何做性能优化的?
内存泄漏和内存溢出的区别
内存泄漏是什么?为什么会发生?常见哪些内存泄漏的例子?都是怎么解决的?
什么情况会导致内存溢出?

内存泄漏是导致内存溢出的主要原因;直接加载大图片也易造成内存溢出

上一篇 下一篇

猜你喜欢

热点阅读