Android学习笔记汇总

Activity相关

测试下来发现:onSaveInstanceState()在onStop之后调用,onRestoreInstanceState在onStart()之后调用。可以在ActivityThread类的callActivityOnStop()方法和handleStartActivity()方法中看出来。

Fragment相关

Fragment生命周期和Activity生命周期

activity_fragment_lifecycle.jpg
activity_lifecycle.jpg

fragment_lifecycle.jpg

Service相关

Android一般的进程优先级划分:

1.前台进程 (Foreground process)
2.可见进程 (Visible process)
3.服务进程 (Service process)
4.后台进程 (Background process)
5.空进程 (Empty process)

安卓系统,根据oom_adj, 占用内存大小,进程活跃程度,来综合决定回收哪个进程。oom_adj 存储在proc/PID/oom_adj文件中,其中PID是进程的id,直接 adb shell进入手机根目录查看这个文件即可。

比如我现在进程是在最前面和我交互的,是前台进程,进程id是18303,这样查看。

1|HWNOH:/ $ cat /proc/18303/oom_adj
0
HWNOH:/ $ 

然后我退到后台,再次查看。

1|HWNOH:/ $ cat /proc/18303/oom_adj
11
HWNOH:/ $ 

Android布局优化之ViewStub、include、merge

BroadcastReceiver 相关

AsyncTask相关

Android 事件分发机制

Android View 绘制流程

Android Window、Activity、DecorView以及ViewRoot

Android的核心Binder多进程AIDL

AMS,WMS,PMS

git clone https://android.googlesource.com/platform/frameworks/base

替换成

git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base

Android ANR

Android 内存相关

Android 屏幕适配

Android 缓存机制

Android 性能优化

Android MVC、MVP、MVVM

Android Gradle 知识

RxJava

OkHttp

OkHttp是一个高效HTTP客户端,原因如下:

  • HTTP/2支持请求同一个host的多个请求共享一个socket连接。
  • 连接池降低请求延迟(HTTP/2不可用的情况)。
  • 透明的GZIP压缩下载体积。
  • 响应缓存,避免完全重复的request发起网络请求,可以直接从缓存里面获取响应。

当OkHttp遇到网络问题的时候,它会静默的从常见的连接问题中恢复。如果你的服务有多个IP地址,当第一次连接失败的时候,OkHttp会尝试其他的地址。对于IPv4+IPv6以及服务放在多个数据中心的情况,这是很重要的。OkHttp支持先进的TLS(传输层安全协议)特性。

使用OkHttp很简单。它的request/response API都是使用构建模式创建,并且是不可变的。OkHttp支持同步和异步请求。

HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

三次握手四次挥手

  1. 主动结束端发送消息给被动结束端,说明主动结束端已经没有数据发送了。
  2. 被动结束端收到消息后,被动结束端的数据可能还没有发送完毕,所以他先发送一个消息告诉主动结束端:"我知道了"。
  3. 被动结束端数据发送完毕后,通知主动结束端:“我数据发送完了,可以关闭连接了。”。
  4. 主动结束端发送一个消息给被动结束端,如果在两倍超时间内没有收到响应,就断开连接。

Retrofit

Android 热更新与插件化

Android组件化

卡顿相关

卡顿原因是什么,如何检测卡顿,怎么判断是页面响应卡顿还是逻辑处理造成的卡顿?

卡顿原理是什么:60帧每秒是目前最合适的图像显示速度,也是绝大部分Android设备设置的调试频率,如果在16ms内顺利完成界面刷新操作可以展示出流畅的画面,而由于任何原因导致接收到VSYNC信号的时候无法完成本次刷新操作,就会产生掉帧的现象,刷新帧率自然也就跟着下降(假定刷新帧率由正常的60fps降到30fps,用户就会明显感知到卡顿)

造成卡顿的常见原因:

  1. 过度绘制
  • 去除不必要的背景
  • 布局文件扁平化
  • merge、ViewStub标签的使用
  1. UI线程中有耗时操作,I/O读写、数据库访问等;
  • 减少ui线程中的耗时操作
  1. 频繁的GC
  • 避免内存抖动,瞬间创建大量的临时对象。不要在for循环中去new对象或在onDraw方法中创建对象等。
  • 避免内存泄漏。

如何检测卡顿?

  • StickMode
  • TraceView(已被弃用,考虑使用 Android Studio自带的CPU Profiler)
  • AndroidPerformanceMonitor
  • ANR-WatchDog
  • Choreographer

推荐使用 AndroidPerformanceMonitor和Android Studio自带的CPU Profiler

怎么判断是页面响应卡顿还是逻辑处理造成的卡顿?
关于运算阻塞导致的卡顿的分析可以使用TraceView(已被弃用,考虑使用 Android Studio自带的CPU Profiler)android studio:profiler调试闪退解决方法

备注:我的理解页面响应卡顿就是指布局过于复杂、过度绘制造成的卡顿。可以打开发开者选项里的OverDraw(调试GPU过度绘制)和GPU呈现模式来查看

  1. Android性能优化(六)之卡顿那些事
  2. Android APP 卡顿问题分析及解决方案
  3. Android UI性能优化 检测应用中的UI卡顿

Handler 机制原理,IdleHandler 什么时候调用。

LeakCanary 原理,为什么检测内存泄漏需要两次?

我的理解为什么要检测两次? 其实就是为了准确性呗。宁可错杀一百,不愿放过一个。

  1. 如果在activity destroy以后并且在5秒钟之后系统没有进行gc,那么activity对象是没有被回收的,此时我们检测发现activity对象没有被回收,然后我们再手动调用一次gc,gc过后,我们再检测一次activity对象是否被回收,如果被回收了,那么结束,如果activity对象还是没有被回收说明很可能出现了内存泄漏无法被回收,所以我们就并dump出当前的内存文件供之后进行分析。

属性动画、补间动画、帧动画的区别和使用场景;

APK 瘦身是怎么做?

冷启动优化

Android性能优化(一)之启动加速35%
https://zhuanlan.zhihu.com/p/86283192

RecyclerView相关

如何判断一个 APP 在前台还是后台?

代码可以参考
https://github.com/humanheima/ActivityDemo

如何做应用保活?全家桶原理?

Retrofit 在 OkHttp 上做了哪些封装?

invalidate和requestLayout的区别

  1. requestLayout和invalidate 区别

Parcelable & Parcel

Parcel是一个可以通过IBinder来发送的消息 (data and object references) 容器。Parcel不是一个通用的序列化机制。Parcelable & Parcel和被设计成一个高性能的IPC传输。因此,Parcel数据不适合持久存储(存储在文件中)。

Parcelable的原理
如何将 Parcelable 保存到本地文件里

ButterKnife

加载超级大的图片

SurfaceView 和 TextureView 的区别。

Android 打包流程

Android中的Dalvik和ART区别分析

进程管理

V1 V2 V3 签名

Walle渠道包生成工具基于V2签名:

对新的应用签名方案生成的APK包中的ID-value进行扩展,提供自定义ID-value(渠道信息),并保存在APK中
而APK在安装过程中进行的签名校验,是忽略我们添加的这个ID-value的,这样就能正常安装了
在App运行阶段,可以通过ZIP的EOCD(End of central directory)、Central directory等结构中的信息(会涉及ZIP格式的相关知识,这里不做展开描述)找到我们自己添加的ID-value,从而实现获取渠道信息的功能
新一代渠道包生成工具完全是基于ZIP文件格式和APK Signing Block存储格式而构建,基于文件的二进制流进行处理,有着良好的处理速度和兼容性,能够满足不同的语言编写的要求,目前笔者采用的是Java+Groovy开发, 该工具主要有四部分组成: 1. 用于写入ID-value信息的Java类库 2. Gradle构建插件用来和Android的打包流程进行结合 3. 用于读取ID-value信息的Java类库 4. 用于供com.android.application使用的读取渠道信息的AAR

这样,每打一个渠道包只需复制一个APK,然后在APK中添加一个ID-value即可,这种打包方式速度非常快,对一个30M大小的APK包只需要100多毫秒(包含文件复制时间)就能生成一个渠道包,而在运行时获取渠道信息只需要大约几毫秒的时间。

下面的代码获取渠道信息:

WalleChannelReader的 getChannel 方法。

@Nullable
public static String getChannel(@NonNull final Context context) {
    return getChannel(context, null);
}

@Nullable
public static String getChannel(@NonNull final Context context, @NonNull final String defaultChannel) {
    final ChannelInfo channelInfo = getChannelInfo(context);
    if (channelInfo == null) {
        return defaultChannel;
    }
    return channelInfo.getChannel();
}

硬件加速相关

Target API level >=14 硬件加速默认开启。在 Android 里,硬件加速专指把View中绘制的计算工作交给 GPU来处理。启用硬件加速需要更多资源,因此应用会占用更多内存。简单来说,开启硬件加速主要在绘制和执行动画的过程中可以提升性能。

WindowManagerService

WindowManagerService的作用:

  1. 窗口管理(WindowManager)
  2. 输入系统的中转站(InputManagerService)
  3. 窗口动画(WindowAnimator)
  4. Surface管理(SurfaceFlinger)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容