美文网首页
面试话术

面试话术

作者: 云木杉 | 来源:发表于2020-01-04 16:01 被阅读0次

activity的状态

Running->paused->stop->kill

  • Running是当前Activity位于栈顶时开始调用
  • paused是当前activity失去焦点以后调用的
  • stop是当前activity不再显示以后,就是看不见以后调用
  • kill是当前activity被后台系统回收以后

activity的生命周期

  • activity启动以后-> onCreate - onStart - onResume
  • 按Home键以后 -> onPause - onStop
  • 再次返回activity以后 -> onRestart - onStart - onResume
  • 退出当前activity以后 -> onPause -onStop - onDestroy

android进程优先级

前台进程 / 可见 / 服务 / 后台 / 空

  • 前台进程就是正在与用户交互的进程,持有焦点
  • 可见进程就是已经失去了焦点,但依然可见,比如activity里弹了一个对话框,那activity就会进入可见进程
  • 服务进程 由名字就可以看到,是开启一个服务
  • 后台进程 是比如当前activity按home键以后,将会进入后台
  • 空进程 就是一个空进程,什么都没有了,随时有可能被杀掉

activity启动模式

  • standard 默认模式 每次打开新的activity时,都会去new一个新的实例,进入任务栈,生命周期也会正常调用
  • singletop 栈顶复用模式 当打开新的activity时,栈顶已经有当前activity的实例存在,会复用栈顶的, 调用onNewIntent方法 不会重走生命周期
  • singletask 栈内复用模式 当打开新的activity时,如果栈内已经有了当前activity的实例,会复用栈内的,同时把该实例上面的所有实例,弹出任务栈 也是调用onNewIntent方法,不会重走生命周期
  • singleInstance 单例 一个任务栈只持有一个实例

scheme跳转协议

Handler

Handler机制是一种线程间通讯机制,在我们在activity中初始化一个handler时,handler的构造函数中获取获取looper对象,且再使用looper对象获取MessageQueue消息队列,所以我们需要在handler构造之前实例化looper对象,主线程在应用启动时的main方法里,调用了Looper.prepare()方法,里面初始化了一个新的Looper对象,并且存放在了ThreadLocal中,

  • 初始化Handler

  • Looper.prepare() 初始化Looper

  • ThreadLocal Thread.get() = ThreadLocalMap 以ThreadLocal为key,Entry[]为值

  • handler.sendMessage()

  • Looper.loop() MessageQueue

  • HandlerThread 一个封装了Looper的thread

  • IntentService 一个封装了handler和HandlerThread的Service

ANR的产生和处理

  • 基本上四大组件都是在主线程里处理的,所以产生应用ANR的原因基本上都是在主线程中做耗时操作
  • 解决ARN 使用AsynTask HandlerThread进行耗时操作

UI卡顿

  • 每秒六十帧 十六毫秒一帧 所以十六毫秒刷新一次,超过这个界值,肉眼看上去就会卡顿
  • overdraw 过渡绘制 布局layout过于复杂
  • 同一时间动画执行次数过多
  • hierarchyView工具检测 View的绘制过程的速度

解决办法

  • 布局优化
  • listview及adapter优化,列表滑动时不加载图片
  • 避免ANR

内存溢出

检测工具 LeakCanary,其原理是监控每个activity,在activity ondestory后,在后台线程检测引用,然后过一段时间进行gc,gc后如果引用还在,那么dump出内存堆栈,并解析进行可视化显示。使用LeakCanary可以快速地检测出Android中的内存泄露。

  • 单例
  • 非静态内部类
  • Handler
  • 尽量避免使用static成员变量
  • 资源未关闭

网络优化

  • AndroidStudio自带的Monitor检测网络
  • 使用Fildder抓包工具检测

优化方式

  • 做缓存操作
  • 避免过度网络请求
  • 根据实际需求制定网络请求策略,WIFI或者使用流量,策略是不同的

APK瘦身

  • 移除无用代码
  • 避免无用的库,或者功能相似的库
  • 启用混淆
  • 第三方库的瘦身,仅保留自己需要的一部分
  • 图片转为WebP
  • 在允许的情况下,针对用户机型分布保留特定架构的So;

相关文章

网友评论

      本文标题:面试话术

      本文链接:https://www.haomeiwen.com/subject/qudxactx.html