Android面试常见问题总结

本文总结了Android面试中常见的问题,包括AsyncTask的生命周期及缺陷、HandlerThread的工作原理及其优缺点、IntentService的使用和原理、Binder机制详解、事件分发机制、SystemUI启动流程、Activity启动模式以及内存管理策略等。深入探讨了Android应用性能优化和调试工具的使用,旨在帮助开发者更好地理解和应对面试中的技术挑战。
摘要由CSDN通过智能技术生成

1、AsyncTask是什么? 有什么缺陷?
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。多个AsyncTask对象是串行执行的。Android 1.5刚开始引入AsyncTask的时候,execute方法确实是串行执行的,类定义里面只有SERIAL_EXECUTOR线程池;到1.6版本时,改用并行线程池THREAD_POOL_EXECUTOR,再到3.0版本至今,就成了上面说的模样————定义两个线程池,但是默认用串行池。
缺陷:1)生命周期,当activity销毁时,AsynTask会一直执行,直到doInBackground()方法执行完毕,持有activity的引用,造成 内存泄漏
解决方案:第一,在Activity生命周期结束前,去cancel AsyncTask
第二,如果一定要写成内部类的形式,对context采用WeakRefrence,在使用之前判断是否为空。

2、HandlerThread原理
当系统中有多个耗时任务需要执行时,每个任务都会开启新的线程去执行耗时任务,这样会造成系统多次创建和销毁线程,影响系统性能。为了解决这个问题,google提出了HandlerThread,它本质是一个线程类,继承于Thread。
HandlerThread有自己的内部Looper对象,可以进行loopr循环。通过获取HandlerThread的looper对象传递给Handler对象,可以在handleMessage()方法中执行异步任务。创建HandlerThread后必须先调用HandlerThread.start()方法,Thread会先调用run方法,创建Looper对象。当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞。它在Android中的一个具体的使⽤场景是IntentService。
2)HanlderThread的优缺点
HandlerThread优点是异步不会堵塞,减少系统创建线程和销毁线程对性能的消耗。
HandlerThread缺点是不能同时继续进行多任务处理,要等待进行处理,处理效率较低。 HandlerThread与线程池不同,HandlerThread是一个串队列,背后只有一个线程。
3)怎样使⽤HandlerThread?
a. 创建HandlerThread的实例对象 HandlerThread handlerThread = newHandlerThread(“myHandlerThread”); 该参数表示线程的名字,可以随便选择。
b. 启动我们创建的HandlerThread线程 handlerThread.start();
c. 将handlerThread与Handler绑定在一起。即将线程的looper与Handler绑定在一起,在handleMessage()中处理任务。

3、IntentService
IntentService是一种特殊的Service,它继承了Service并且它是一个抽象类,因此必须创建它的子类才能使用IntentService
原理
在实现上,IntentService封装了HandlerThread和Handler。当IntentService被第一次启动时,它的onCreate()方法会被调用,onCreat()方法会创建一个HandlerThread,
然后使用它的Looper来构造一个Handler对象mServiceHandler,这样通过mServiceHandler发送的消息最终都会在HandlerThread中执行。
生成一个默认的且与主线程互相独立的工作者线程来执行所有传送至onStartCommand()方法的Intetnt。
生成一个工作队列来传送Intent对象给onHandleIntent()方法,同一时
刻只传送一个Intent对象,这样一来,你就不必担心多线程的问题。在所有的请求(Intent)都被执行完以后会自动停止服务,
所以,你不需要自己去调用stopSelf()方法来停止。

4、Binder机制
Binder是Android系统进程间通信(IPC)方式之一。
Binder使用Client-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值