Jfson‘s blog

慢慢来,比较快

FastgrabCongigReader 华为P9 内存泄漏

最近有个泄漏很诡异,来自华为 P9 泄漏日志: 123static android.rms.iaware.FastgrabCongigReader.mFastgrabCongigReaderreferences android.rms.iaware.FastgrabCongigReader.mContext... 借用一张泄漏图:LoginActivity设置给了,导致LoginAct......

劝君惜取少年时

惜取少年时 看过 byvoid 的博文,确认,自己的前二十年过的跟玩笑似的,阴差阳错学了计算机专业,从事程序员行业.却带来了前所未有的成就感。当然我也进入了瓶颈期。 困惑 普通玩家指的是,循规蹈矩,按照大多数人的生活轨迹来生活的人,5岁上学,20岁大学毕业参加工作,25岁结婚,30岁生孩子,50岁退休,这不是大多数人的一生吗,这就是普通玩家。高端玩家,不会拘泥于大家眼中该怎样怎样的生活,......

Android 启动速度优化

启动优化 随着项目越来越大,App的启动时间愈来愈长,有必要对给初始化进行梳理,并预留初始化接口。经过一番折腾后,并对比优化前,成果还不错:优化35%-50%。 Google文档:https://developer.android.com/topic/performance/launch-time.html1.启动时间统计 a.第一种方式查看Logcat日志,搜索关键字:Displayed......

Binder (4) - ServiceManager 启动流程

纵观Binder通讯过程,无不在跟ServiceManager打交道,了解ServiceManager 交互流程就显得很有必要了。ServiceManager分为启动和、获取、添加、注册服务。首先从启动过程来了解,ServiceManager如何成为Binder守护进程。 123456源码路径android/system/core/rootdir/init.rcandroid/frame......

Binder (3) - AIDL使用

要想了解Binder的原理,结合使用方便我们更简单的去理解调用逻辑。AIDL :Android Interface definition language 我们可以理解为Android 接口定义语言。通过它可以实现进程间的通讯(IPC),如何实现AIDL呢? 进程间通讯需要两个进场,体现在Android中就需要两个App(一个作为Server,一个作为Client).接下来看如何使用AID......

Binder (2) - 序列化

Android 开发的时候,在对数据进行持久化的时候,或者数据传递的时候会用到序列化,这时候可以对当前数据类实现Serializable或者Parcelable接口。尤其是进程间通信时,传递数据需要对对象进行序列化。 序列化 序列化指的是将一个实例对象编码成字节流,并从字节流编码中重新构建对象实例的能力。将一个对象编码成字节流,称为序列化;从一个字节流中读出一个对象实例,称为反序列化。 ......

构造者模式(Builder Pattern)

构造者模式(Builder Pattern) 建造者模式是及其常用的一种设计模式,经常提现在一些开源的三方库中来进行return 当前对象进行链式调用,如果你要开源一个niubility 的库,那么学习一下建造者模式是非常有必要的。 介绍:将一个复杂对象的构建与它的表示分离,用于属性参数很多时。 很多流行框架用到它,举个最典型的Retrofit的使用。 1234567// 忽略......

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式相对于工厂模式来说,最大的不同是:将工厂的共同特征抽取出来,提供一个生成工厂类。 1.举例制作果汁,首先提供两个接口类,果汁的种类和加冰多少。 1234567public interface MakeIce { void putIce();}public interface MakeJuice { void juicing();&......

工厂模式(Factory Pattern)

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 1.举例制作果汁,首先提供两个接口类,果汁的种类和加冰多少。 1234567public interface MakeIce { void putIce();}public interfa......

单例模式

单例模式 最常用的单例模式,经常在项目中见,梳理后发现各种各样的单例,索性梳理一下。 自己创建自己,提供了访问其唯一对象的方式,可以直接访问,不需要实例化对象。 私有构造 自己创建唯一实例 1.懒汉式 非线程安全 lazy loading 不标准,不常用 123456789101112public class UserModel{ private st......

代理模式(Proxy Pattern)

代理模式在java 中的使用很常见,在Android中使用更为常见,类似代理一些生命周期,或者AOP编程以及业务解耦等等使用场景。 代理模式分为静态代理和动态代理。 静态代理1234567891011121314151617181920212223242526272829303132interface BaseView { void showText();}......

设计模式

设计模式 一直所熟知的设计模式: 单例模式、工厂模式、建造者模式等等。这些常用的之外,其他非常见的设计模式没有专门归类总结,借此机会,归纳一下咯。 设计模式总分为:创建型模式、结构性模式、行为型模式、J2EE模式 创建型模式 在创建对象的同时隐藏了创建逻辑的方式(非直接实例化) 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Patter......

Binder (1) - Linux IPC 现有机制

Linux IPC 机制 IPC(InterProcess Communication)进程间通讯,我们都知道Android内核其实就是Linux内核,而每个Android Application进程其实就是一个Linux进程,Linux 已经有比较好的IPC机制,为什么Android用Binder实现IPC机制呢?,分析Linux 一下的IPC 机制,方便深入理解Android Binde......

系统 Mainfest 文件解析流程

系统 Mainfest 文件解析流程 为什么要看 Mainfest 文件解析流程呢,因为解析来分析apk的安装流程需要用到,而且 AndroidMainfest 文件是程序的配置文件,了解其解析流程还是非常有必要哒~ 之前的分析中,系统会在启动时读取所有app的Mainfest以便于启动某个应用。 1.入口 在PackageManagerService 中,系统去解析app文件。那么从构......

Application 启动流程

应用启动流程 每个Application Linux进程中,Android操作系统会启动这个进程当这个Android组件需要执行的时候,当其不在长时间使用或者系统必须回收内存为其他App时,这个进程会被干掉。 回顾:上篇blog中,介绍了Launcher启动流程,最后点击桌面图标启动应用 1234protected void onListItemClick(ListView l, Vi......

Launcher 启动流程

Launcher 启动流程 1 启动Launcher 在之前分析了一下SystemServer源码,最后启动boot/core/other … Service,在startOtherService 中,有调用到 mActivityManagerService.systemReady(); 123456789101112131415161718192021222324252627282930......

SystemServer 进程启动流程

SystemServer 进程 1.1 SystemServer进程是由Zygote进程fork 出来的。上篇介绍了fork过程 1.2 SystemServer进程 是用来启动各种系统服务的进程,例如ActivityManagerService,WindowManagerService,PowerManagerService,PackageManagerService等等,当应用需要系统服......

Android Zygote进程启动流程

Zygote进程简介什么是Zygote进程? Zygote进程 是整个Android系统的根进程,包括SystemServer进程和所有应用进程在内都是通过Zygote进程 fork 出来的。Zygote进程则是通过Linux系统init进程启动。 启动顺序: Linux系统init进程 –> Zygote进程 –> SystemServer进程 –> Applicati......

Android Studio 编译系统源码

环境配置 & 下载 参考文章 官方文档湫水blog清华镜像调试以下所有操作在mac上进行 推荐下载 7.0及以上系统!!! 1.创建磁盘映像(80G) 1$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg 2.安装MacP......

Handler、Looper、MessageQueue

源码:Handler、Looper、MessageQueue 初始化 1.在 UI 线程创建 Handler,通常直接new Handler; 123456private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { ......

pv UV: