安卓面试经常问到的问题

本文详细介绍了Android面试中常见的基础组件问题,包括Activity生命周期、Service保持常驻、Acitivty任务栈管理以及Context的使用。此外,深入探讨了Android性能优化,涵盖App启动优化、响应速度、布局、内存和网络等方面。在线程篇中,讲解了Handler、Message、Looper、MessageQueue的工作原理,以及如何在Service中创建Dialog,还对比分析了HandlerThread、IntentService和AsyncTask的异同与使用场景。
摘要由CSDN通过智能技术生成

一、Handler机制:

  1. 由于Android主线程做耗时操作超过5秒没有响应会产生ANR,所以 Android发布了一套更新UI的机制,我们通常称之为Handler机制
  2. Handler机制中分为,Thread、Handler、Message、Message Queue和Looper
  3. Handler机制的流程为Thread处理耗时逻辑,把处理结果通过message传递给Handler,Handler在构造方法中通过Looper.myLooper()获取到对应的Looper,然后通过Looper来确定把Message放置在哪个Message Queue中,然后通过Looper循环把Message取出更新到对应的线程中。
  4. Message Queue遵循先进先出原则
  5. 我们自己穿件的线程,默认是没有消息队列(Message Queue)和消息循环(Looper)的,想要让一个线程具有消息处理机制,我们需要在线程中先调用Looper.perapre()来创建一个Looper对象,然后调用Looper.loope()进入消息循环。
  6. 当我们创建了Handler对象时,指定Handler与哪个具有Looper的线程关联,这个线程就成了目标线程

二、Android 性能优化:

  1. Android性能优化分为:App启动优化、响应优化、布局优化、内存优化、省电优化、网络优化
  2. App启动优化:Android程序启动分为:热启动、温启动和冷启动。启动优化针对的就是冷启动,其中冷启动涉及的一个是Application的OnCreate()方法,另外一个就是首屏Activity的渲染
  3. 响应优化:Android 产生ANR的情况为:Activity超过5秒无响应、BroadcastReceiver超过10秒无响应、Service超过20秒无响应
  4. 布局优化:布局中尽量减少嵌套关系,这里有一个工具H-Viewer可以看到布局的嵌套关系
  5. 内存优化:内存优化有分为三个问题: 
    问题一:GC优化,这里要注意的就是使用过的资源要及时进行回收,这里就要灵活运用强引用、软引用和弱引用 
    问题二:图片优化,由于Android虚拟机一般内存只有16-32M的内存,而高清图片一张就要占4-5M,如果不对图片进行处理,那么很容易就会产生OOM,在使用图片的时候要对图片进行必要的压缩 
    问题三:在自定义控件的时候,要尽量避免重复绘制,在onDraw()方法中尽量避免创建变量(推荐测试工具为手机开发者选项中的 调试GPU过度绘制)
  6. 省电优化:Android中耗电最多的三个功能为:手机屏幕、手机网络、GPS。这里我们要考虑的主要是手机网络和GPS。在写项目的时候,要尽量少的进行网络请求,在GPS功能使用结束后,最好把GPS功能关闭。(推荐工具:wakelock)
  7. 网络优化: Android网络优化推荐工具为Android Studio内置的Monitor,其中主要包括两个优化方向: 
    问题一:当处理图片的时候,最好和后台协商好几种尺寸的图片,在进行网络请求的时候,把对应的尺寸当作参数传递 
    问题二:在Wifi网络下,要进行一定的缓存策略,这样在4G网络和无网络的时候客户体验会更好些。

=========================================================================================

基础组件篇

横竖屏切换时Activity的生命周期变化?

1.如果自己没有配置android:ConfigChanges,这时默认让系统处理,就会重建Activity,此时Activity的生命周期会走一遍。

 

 

640?wx_fmt=other&wxfrom=5&wx_lazy=1

 

onSaveInstanceState() 与onRestoreIntanceState() 
资源相关的系统配置发生改变或者资源不足:例如屏幕旋转,当前Activity会销毁,并且在onStop之前回调onSaveInstanceState保存数据,在重新创建Activity的时候在onStart之后回调onRestoreInstanceState。其中Bundle数据会传到onCreate(不一定有数据)和onRestoreInstanceState(一定有数据)。 用户或者程序员主动去销毁一个Activity的时候不会回调,其他情况都会调用,来保存界面信息。如代码中finish()或用户按下back,不会回调。

 

 

2.如果设置  android:configChanges="orientation|keyboardHidden|screenSize">,此时Activity的生命周期不会重走一遍,Activity不会重建,只会回调onConfigurationChanged方法。

如何保证Service不被杀死?

  • 提供进程优先级,降低进程被杀死的概率 方法一:监控手机锁屏解锁事件,在屏幕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值