美文网首页
面试准备2019-01-24

面试准备2019-01-24

作者: 被时光移动的城 | 来源:发表于2019-01-25 00:40 被阅读10次
activity栈和四种形态.png 正常情况下activity生命周期.png
异常情况下的activity生命周期.png
image.png

只有异常情况下系统才会自动调用onSaveInstanceState (Bundle bundle)通过bundle存储数据,回复数据可通过onCreate和onRestoreInstanceState这两个方法恢复,区别在于onRestoreInstanceState中的bundle一定不为空,而onCreate方法中的bundle可以为空,要做非空判断,建议使用onRestoreInstanceState。


activity之间通信.png
activity之间通信.png
activity将数据传递给fragment.png
activity与service数据通信.png
standard.png
singleTop.png
singleTop应用场景.png
singleTask.png

taskAffinity任务相关性
注意:只有onNewIntent所属的activity(singleTask启动模式)已经创建才会执行onNewIntent


singleTask应用场景.png
singleInstatnce.png
singleInstance应用场景.png
Service和Thread.png
Service.png
service生命周期.png
IntentService内部执行耗时操作的线程.png
IntentService总结.png
image.png
绑定服务是依托于activity,启动服务依靠自己的service和内存的一些情况
image.png
parcelabel和serializable.png
image.png

数据传递用parcelable
数据存储用serializable


AIDL.png
image.png
广播.png
广播注册方式.png
静态和动态广播特点.png
广播应用场景.png
[图片上传中...(image.png-90ec1f-1548299586241-0)] .png
webview坑2.png
webview内存泄漏问题.png
handler.png
handler机智.png
Message:handler接受和处理消息的对象;
Looper:每一个线程只能有一个Looper,是线程持有,内部有一个方法可读取MessageQueue消息队列中的消息,消息取出交给Handler;
MessageQueue:消息队列,先进先出的方式管理Message,创建Looper的时候,在Looper的构造方法中会创建MessageQueen对象,是单链表数据结构;
Handler:发送消息,处理消息;
handler总结.png
asyncTask.png
asyncTask.png image.png

默认情况下AsyncTask是串行的!
AsyncTask是个抽象类
核心线程数:cpu核数+1
最大线程数:cpu核数*2 + 1
ThreadFactory是用来创建线程池的
blockingqueue 阻塞队列:容量128
AsyncTask内部有一个静态的线程池
SerialExecutor.execute串行的执行mTasks队列中的runnable
schedduleNext最终还是使用Thread_pool_executor来执行线程操作
InternalHandler绑定了主线程的handler,子线程以此来更新UI

Java并发编程:Runnable 、Callable
Runnable的run()方法无返回值;Callable<V> 的 V call()方法是有一个V泛型的返回值
WorkerRunnable implements Callable
FutureTask -- get<该方法会等待Callable的call方法返回值,否则就会阻塞等待> /cancel /done

image.png view绘制.png

getrootMeasureSpec 获取宽高
通过MesasureSpecMode 获取模式
通过MesasuerSize获取大小
performMesasuer 进行测量
onMeasure获取父view对子view测量的宽高
setmeasureDimension进行设置

draw.png
draw核心方法.png
、viewgroup的dispatchDraw.png

easuse 测量子view的宽高 ,layout测量子view相对父类的布局,ondraw绘制出来

recycleBin机制.png anr.png anr原因.png 主线程操作.png
解决ANR.png

使用Asynctask处理耗时io操作
使用Thread或者handlerThread 提高优先级,都能开启一个线程,后者handlerThread可以在子线程中创建handler发送消息,因为它内部创建了Looper 关联了消息队列,所以后者可以创建handler。
使用handler来处理工作线程的耗时任务
activity的oncreate和onResume回调中尽量避免耗时的代码

oom.png
image.png
避免oom
一、bitmap优化
1.图片显示-加载何时储存的图片,例如listview监听滑动事件,在滑动的时候不去调用网络请求,滑动停止加载大图。
2.及时释放内存---释放c区
3.图片压缩---insampsize()缩放比例
4.inBitmap--可以bitmap分配和释放的效率,告诉decode解码器,使用已有的内存区域
5.捕获异常---实例化bitmap一定要对outfomemery(oom) error进行捕获。
二、 image.png
image.png
LRU--存储bitmap,三级缓存。
实现机制:内存使用LinkedHashMap,提供了get(),put()方法来完成缓存的添加和获取操作。缓存满之后,提供trimToSize()方法,把较早缓存对象移除,添加新的缓存对象
inSampleSize.png
缩略图.png
image.png image.png
image.png

布局优化
1.使用include,merge标签
2.尽量不存在冗余嵌套,复杂布局
3.使用gone替代invisible
4.使用weight
5.item存在非常复杂的嵌套时,建议使用自定义view

列表及Adapter优化
1.复用getview,不重复使用获取实例使用convertview
2.列表滑动不进行元素的更新。

背景和图片等内存分配优化
1.减少背景设置
2.图片压缩处理

image.png
image.png
image.png

handler造成内存泄漏的原因,是其与主线程context的生命周期不一致导致,具体主要包括:

  1. 使用了postDelayed()、sendMessageDelayed()等方法,导致在delay时间到达前出现MessageQueue -> Message -> Handler -> Activity的引用链;
  2. 在handler被耗时线程回调前,耗时线程会一直持有该handler对象(直接持有,或通过持有其obtain的message的对象的target持有)
    image.png
    image.png
    image.png
    image.png
    image.png
    特点:冷启动会先创建和启动application类,再创建和初始化MainActivity类,测量,布局,绘制,显示再界面上;热启动不需要创建Application类,只创建初始化MainActivity就够啦
    image.png
    image.png
    image.png
    image.png
    其他优化
    image.png
    StrictMode,追踪UI卡顿的工具
    image.png
    image.png
    image.png
    image.png
    ①.Serializeble (Java)
    该接口序列化的时候会引起大量临时变量—>频繁GC回收、内存 抖动—>UI卡顿—>严重则OOM
    ②. parcelable(Android特有的序列化方式)
    缺点:Parcelable 不能使用在要将数据存储在磁盘上的情况
    优点:在内存使用上性能更好,使用场合Android中的进程间通信传递信息
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png
    image.png

相关文章

  • 面试准备2019-01-24

    只有异常情况下系统才会自动调用onSaveInstanceState (Bundle bundle)通过bundl...

  • 回忆

    2019-01-24 坚持分享第151天 于我,准备过年就是整、整、整,扔、扔 、扔,扫、扫、扫,洗、洗、洗,还有...

  • leapfrog 每日一词

    2019-01-24 Day 86 leapfrog 释义:to suddenly become better,...

  • 面试准备

    面试官您好,我叫 我毕设内容是设计和开发一个基于RFID自动识别技术的物流跟踪系统,其中包括开发一个中间件,用于提...

  • 面试准备

    1.StringBuffer 实现远离 java 常用集合的数据结构:hashmap linklist array...

  • 面试准备

    准备:简历编写和面试前准备 一般来说,跳槽找工作要经历投递简历、准备面试、面试和谈 offer 四个阶段。其中面试...

  • 面试准备

    1、了解公司,看公司网站、 了解公司产品、服务特色,再看看公司管理的背景、企业文化等方面,可能的话去翻翻 企业年报...

  • 面试准备

    已经过了一年没有工作,以前的工作内容都模糊了,于是进入了以前工作的网站再次观察浏览好像又找回了一些东西,感觉上没有...

  • 面试准备

    1.HashMap && CurrentHashMap源码分析 HashMap源码解析 java 并发编程之 Co...

  • 面试准备

    最近一直在忙着晋升的面试准备,所以就把我的一些内容整理了一下,先充当下作业吧! 自我介绍部分:各位领导好,我先自我...

网友评论

      本文标题:面试准备2019-01-24

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