自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Looper景

预见自己、预见未来

  • 博客(86)
  • 资源 (2)
  • 问答 (3)
  • 收藏
  • 关注

原创 Android窗口系统第三篇---WindowManagerService中窗口的组织方式

Android窗口系统第一篇—Window的类型与Z-Order确定 Android窗口系统第二篇—Window的添加过程上面文章梳理了一个窗口的添加过程,系统中有很多应用,每个应用有多个Activity,一个Activity上有一个Window或者多个Window,WindowManagerService是怎么管理的?先adb shell dumpsys activity查看一下Activity

2017-11-08 19:18:45 3189

原创 Android源码解析四大组件系列(八)---广播几个问题的深入理解

接上篇文章,这篇文章主要是总结前面知识,并且了解一些细节问题,加深对广播机制的理解,比如有播有序是怎么保证有序的?广播拦截机制是怎么实现的?广播发送超时了是怎么处理的?registerReceiver方法发返回值有什么用?粘性广播等等。Android源码解析四大组件系列(五)—广播的注册过程Android源码解析四大组件系列(六)—广播的处理过程Android源码解析四大组件系列(七)—广播的发送过

2017-07-24 15:29:58 812 1

原创 Android源码解析四大组件系列(七)---广播的发送过程

本篇文章的目录1、广播数据结构分析2、线程的切换3、processNextBroadcast分析3.1、处理并行广播3.2、处理Pending广播3.3、处理有序广播3.4、获取下一条广播3.5、检查是否是动态广播3.6、检查是否是静态广播3.7、启动进程,处理未发送的静态广播4、动态广播receiver处理5、静态广播receiver处理先了解一下广播的数据结构,然后在分析广播的处

2017-07-24 11:54:01 1090

原创 Android源码解析四大组件系列(六)---广播的处理过程

这篇文章紧接着上篇分析广播的发送过程,发送广播都是调用ContextImpl的接口去实现的,总共有二十多个,最终都是调用到AMS的broadcastIntent。主要分成下面九小节来说明。 1、设置Flag 2、检查BroadcastOptions 3、当前是否有权力发出广播 4、处理系统相关广播 5、处理粘性广播 6、registeredReceivers和receiver

2017-07-24 11:48:33 1139

原创 Android源码解析四大组件系列(五)---广播的注册过程

广播这个篇幅打算用四篇文章来写,分别为广播注册、广播处理、广播的发送,广播深入细节理解,如果都写到一篇文章会比较长,所以拆分成四篇来写。第一篇 Android源码解析—广播的注册过程 第二篇 Android源码解析—广播的处理过程 第三篇 Android源码解析—广播的发送过程 第四篇 Android源码解析—广播深入细节理解想收到广播(Broadcast),必须先要注

2017-07-20 19:17:29 1190

原创 Android架构设计---关于View边界划分的思考

版权声明:本文为LooperJing原创文章,转载请注明出处!在前几篇,我总结了MVP,MVVM,对MVP使用泛型,以避免类爆炸,这些方案的实施在一定的程度的,使得View和业务逻辑成功隔离开来,但是对于一个复杂的界面,,一个layout.xml即使使用了和自定义控件,上千行也是很有可能的。所以这篇博客,主要记录业务视图模块怎么编写比较好,当然这不是教科书,只是分享我关于这方面的思考。一、复杂视图分

2017-05-23 17:21:18 540

原创 Android插件化系列第(四)篇---插件加载机制两种方案

这篇博客说说插件的加载机制,建议阅读Android插件化系列第(二)篇—动态加载技术之apk换肤了解类的加载机制。一、相关概念1.1、为什么需要动态加载这个问题,前面已经介绍过,如下 Android系统使用了ClassLoader机制来进行Activity等组件的加载;apk被安装之后,APK文件的代码以及资源会被系统存放在固定的目录(比如/data/app/package_name/1.apk

2017-03-20 12:36:30 1517

原创 Android插件化系列第(五)篇---Activity的插件化方案(代理模式)

这篇文章介绍Activity的插件化方案,Activity的插件化方案不止今天介绍的这一种。建议在看本文之前,先看我的前两篇博客,如果前两篇有认真看过,那么阅读本文至多十分钟完事儿!Android插件化系列第(一)篇—Hook技术之Activity的启动过程拦截Android插件化系列第(二)篇—动态加载技术之apk换肤Android插件化系列第(四)篇—插件加载机制两种方案看过上面文章,我

2017-03-20 12:33:48 958

原创 Android架构设计---关于MVVM模式的探讨

一、MVP模式优缺点在说MVVM之前,简单回顾一下MVP分层,MVP总共分成三层: - a 、View: 视图层,对应xml文件与Activity/Fragment; - b 、Presenter: 逻辑控制层,同时持有View和Model对象; - c 、Model: 实体层,负责获取实体数据。MVP模式有其很大的优点1.解耦合,业务逻辑和视图分离;2.项目代码结构(文件夹)清晰,一看就

2017-03-20 12:32:47 5965 2

原创 Android架构设计---MVP模式第(二)篇,如何减少类爆炸

今天是2017年3月16日,差不多一年前,写过一篇MVP基础类型的文章Android架构设计—MVP模式第(一)篇,梳理了一下MVP怎么使用。OK,先回忆一下。一、基础知识1.1、MVP分层总共分成三层 - a 、View: 视图层,对应xml文件与Activity/Fragment; - b 、Presenter: 逻辑控制层,同时持有View和Model对象; - c 、Model: 实体

2017-03-20 12:30:31 2699 1

原创 Android源码解析四大组件系列(二)---Activity启动过程的总体把握

之前写过Service的启动过程,相对来说Activity的启动过程比Service的启动过程更为复杂,其一Activity的生命周期方法比Service多,其二Activity具有启动模式和返回栈。写本文的目的在于更清晰的梳理Activity的启动过程,加强自己的内功修炼,博客粉丝日益增多,力在以最简单的方式让大家理解,跟大家一起学习。Activity的启动过程计划用三篇博客来写;第一篇(本文)

2017-03-08 15:00:36 864

原创 Android源码解析四大组件系列(四)---Activity启动详细流程

在上一篇博客http://www.jianshu.com/p/98fa08ee1bfb,我们起码知道了Zygote是怎么启动SystemServer进程的,AMS是怎么注册的,启动的,启动之后通过Socket怎样与Zygote进程通信的,而Zygote进程收到AMS的请求之后,是怎么fork进程,将ActivityThread的main方法是执行起来的。这些内容在我的前两篇博客都梳理过,建议阅读一下

2017-03-08 14:53:38 1138

原创 Android源码解析四大组件系列(三)---Activity启动过程之ActivityThread是如何运行起来的

这篇文章,深入源码,分析Launcher进程向SystemServer进程发起startActivity请求,SystemServer进程在向zygote进程发起请求,最后孵化出应用进程(我们的APP进程)的这一过程,为什么要分析这个呢,在APP只有一个进程的情况下,通常以冷启动的方式打开APP的一个Activity与热启动的方式打开一个Activity的流程是不一样的,我认为Activity的启动

2017-03-08 14:18:23 1571

原创 Android进程保活的一般套路

自己曾经也在这个问题上伤过脑经,前几日刚好有一个北京的哥们在QQ说在做IM类的项目,问我进程保活如何处理比较恰当,决定去总结一下,网上搜索一下进程常驻的方案好多好多,但是很多的方案都是不靠谱的或者不是最好的,结合很多资料,今天总结一下Android进程保活的一些方案,都附有完整的实现源码,有些可能你已经知道,但是有些你可能是第一次听说,(1像素Activity,前台服务,账号同步,Jobschedu

2017-02-21 15:45:58 29621 12

原创 Android插件化系列第(三)篇---Hook技术之View点击劫持

昨天有好几个小伙伴简信问我,View.onClick怎么hook?回想前几个月前,公司的项目在百度手机助手上线,在快速点击的时候会跳转两次Activity或者两个Dialog等等,为了能够顺利通过百度的测试,老大叫我将所有onClick全部要优化处理,避免用户快速多次点击,于是乎,我写了下面的代码public abstract class NoDoubleClickListener implemen

2017-02-14 09:29:46 2203 7

原创 Android性能优化的方方面面

通常项目比较大的APP都面临着如下性能问题,APP启动慢、界面跳转慢、事件相应慢、滑动和动画卡顿、展现内容慢等,有的公司处理的很好,有的还有很大的优化空间,对于性能优化,怎么去做,我总结了一下性能优化如何入手,Android性能优化这个系列目前已经完成11篇,涉及到常用内存优化工具的使用,比如Memory Monitor、MAT、Allaction Tracing、TraceView 等,也涉及到如

2017-02-12 21:44:40 801

原创 Android插件化系列第(二)篇---动态加载技术之应用换肤

Android系统使用了ClassLoader机制来进行Activity等组件的加载;apk被安装之后,APK文件的代码以及资源会被系统存放在固定的目录(比如/data/app/package_name/1.apk)系统在进行类加载的时候,会自动去这一个或者几个特定的路径来寻找这个类;但是系统并不知道存在于插件中的Activity组件的信息,插件可以是任意位置,甚至是网络,系统无法提前预知,因此正常

2017-02-10 21:17:18 965

原创 Android插件化系列第(一)篇---Hook技术之Activity的启动过程的拦截

这篇文章主要讲解如何利用动态代理技术Hook掉系统的AMS服务,来实现拦截Activity的启动流程。代码量不是很多,为了更容易的理解,需要掌握JAVA的反射,动态代理技术,以及Activity的启动流程。 如果对上面的知识点有些遗忘,建议按需扫读下面三篇文章,否则跳过。Java 反射Java 动态代理机制分析及扩展,第 1 部分深入理解Activity启动流程(三)–Activity启动的

2017-02-09 14:07:23 8921 3

原创 数据结构java语言描述第(一)篇---图的遍历

图的遍历,所谓遍历,即是对结点的访问。一般有两种访问策略:深度优先遍历,广度优先遍历。一、深度优先遍历1、主要思想首先使用一个未走到过的顶点作为起始顶点,比如V0定点作为起始顶点,沿着V0定点的边访问其他未走到过的定点,首先发现V1(第一个邻接结点)还没有走到过,那么来到V1顶点,再以V1顶点作为起始顶点尝试访问其他未走到过的顶点,以此类推,当发现有一个定点不能访问到其他顶点了,需要回到上一次顶点,

2017-02-08 14:29:38 1045 1

原创 Android性能优化第(十 一)篇---卡顿分析,正确评测流畅度

一、FPS评测应用流畅度不准确说到应用的流畅度,都会想到FPS,系统获取FPS的原理是:手机屏幕显示的内容是通过Android系统的SurfaceFLinger类,把当前系统里所有进程需要显示的信息合成一帧,然后提交到屏幕上进行显示,FPS就是1秒内SurfaceFLinger提交到屏幕的帧数。用FPS来评测一个应用是否真的卡顿存在两个问题。 - 有的时候FPS很低,APP看起来却很流畅;

2017-02-07 22:12:36 8482

原创 Android源码解析四大组件系列(一)---Service的启动过程分析

这几天分析了一下Activity的启动过程和Service的启动过程,于是乎,今天写一下Service是如何启动的。给我的感觉是这些启动过程并不复杂,千万不要被一坨一坨的代码吓住了,虽然弯弯绕绕不少,重载函数一个接着一个,就向走迷宫一样,但只要抓住主线阅读,很快就能找到出口。强调一下阅读系统源码,起码要对进程间通信要了解,对binder机制非常非常清楚,binder就是指南针,要不然你会晕头转向。强

2017-01-05 00:27:02 1240

原创 Android源码解析RPC系列(一)---Binder原理

看了几天的Binder,决定有必要写一篇博客,记录一下学习成果,Binder是Android中比较综合的一块知识了,目前的理解只限于JAVA层。首先Binder是干嘛用的?不用说,跨进程通信全靠它,操作系统的不同进程之间,数据不共享,对于每个进程来说,它都天真地以为自己独享了整个系统,完全不知道其他进程的存在,进程之间需要通信需要某种系统机制才能完成,在Android整个系统架构中,采用了大量的C/

2017-01-01 21:55:07 1227 1

原创 流行网络库第(三)篇---动手写图片加载的三级缓存

有很多第三方网络库都有三级缓存机制,比如BitmapUtil,ImageLoader等,今天来谈一谈是怎么实现的,首先三级指的是内存,文件,网络三级。OK下面开始写代码了。对于图片的下载逻辑,我们使用AsyncTask,在这个ImageLoadTask先把总体的框架给写出来,暂时先不管内存缓存,磁盘缓存,与网络请求逻辑怎么实现。public class ImageLoadTask extends A

2016-12-25 16:20:25 439

原创 Android性能优化第(十)篇---布局优化

之前在Android性能优化第(四)篇—Android渲染机制说了一下UI的渲染,我们知道Android系统每隔16ms就重新绘制一次Activity,如果没有完成就会有丢帧的现象。为了减轻UI绘制的负担,有必要把Layout编写的一些注意事项总结一下。首先说一下< include/>,< merge/>,ViewStub,如果对这部分清楚的朋友可以跳过。1、< include/>重用比如我们要写一

2016-12-24 18:43:56 1021

原创 流行网络库第(一)篇---Volley用法解析

Volley是2013年Google I/O大会上推出了一个新的网络通信框架,特么今年都2016年年尾了,这两年新技术出来的真是多的花了眼睛。虽然是三年前的开原库,但是并不妨碍我们研究它。这一篇先了解其基本用法,下一篇是源码解析,以后的网络库方面的分析,一般也是以这个套路来。 这是一幅经典的图,Volley的中文翻译为“齐射、并发”,这表示,Volley特别适合数据量不大但是通信频繁的场景,不支持

2016-12-23 16:31:23 468

原创 流行网络库第(二)篇---Volley源码解析

在上一篇,流行网络库第(一)篇—Volley用法解析中了解了Volley的基本使用,但是对于Volley可能有些朋友还不是特别清楚。我也是结合源码与其他人的分析,才真正弄清楚Volley的工作原理。 先看一个Demo,Volley十几行代码就完成了一次HTPP请求,我们看看这段代码内部究竟发生了什么?public class MainActivity extends AppCompatActivi

2016-12-23 16:30:09 430

原创 Android性能优化第(九)篇---App启动速度优化之启动页设计

在上篇文章Android性能优化第(八)篇—App启动速度优化之耗时检测处理说了应用启动的拦路虎在哪里,最后给出了优化思路,如果经过第一轮的优化之后,还是不满意的话,一般我们是做个启动页,因为启动页一般View的数量比较少,业务逻辑比较简单,启动就不太费劲。一、设计思路常规启动页设计思路通常点击桌面就会执行,Application中的逻辑,这部分的逻辑优化技巧在上篇介绍过,然后会跳入启动页Spl

2016-12-21 20:16:16 1073

原创 Android性能优化第(八)篇---App启动速度优化上

应用的启动速度缓慢这是很多开发者都遇到的一个问题,比如启动缓慢导致的黑屏,白屏问题,大部分的答案都是做一个透明的主题,或者是做一个Splash界面,但是这并没有从根本上解决这个问题。那么如何从根本上解决这个问题或者做到一定程度的缓解?一、应用的启动方式1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会首先会创建一个新的进程分配给该应用,这种启动方式就是冷启动。2、热启动:当启动应用时,后台已

2016-12-21 11:16:50 7136 1

原创 Android性能优化第(七)篇---StrickMode严苛模式检测耗时与内存问题

StrictMode意思为严格模式,是用来检测程序中违例情况的开发者工具。使用一般是场景是检测主线程中本地磁盘和网络读写等耗时的操作。注意这个StrictMode是在Anroid2.3以后引入的。严格模式主要检测两大问题,一个是线程策略,即TreadPolicy,另一个是VM策略,即VmPolicy。线程策略(ThreadPolicy)检测的内容有1、自定义的耗时调用 使用detectCustom

2016-12-20 10:30:29 2747

原创 Android性能优化第(六)篇---TraceView 分析图怎么看

Android性能优化系列好久没有更新了,一直在写Android源码解析的部分,附上前面性能优化文章的链接。Android性能优化第(一)篇—基本概念 Android性能优化第(二)篇—Memory Monitor检测内存泄露 Android性能优化第(三)篇—MAT比Menmery Monitor更强大 Android性能优化第(四)篇—Allaction Tracing追踪内存分配的轨迹

2016-12-15 19:07:16 1303

原创 Gradle系列第(三)篇---Android Studio与Gradle那些事儿

· 本来这篇要写Android性能优化的,个人时间比较少,每天加班到很晚,写博客的时间就很少了,但是Gradle系列的文章还没有写完,所以补一篇,在Gradle系列第(二)篇—Gradle编程主要对象主要写了Gradle中的几个对象(Project,Settings,Gradle,Task、Action),现在聊一聊Android Studio中的gradle常见的功能需求。如果你還沒有阅读过我的

2016-12-14 16:42:48 877

原创 Gradle系列第(二)篇---Gradle编程主要对象

学习Gradle前,需要有一个Groovy语言的基础,以免被Groovy的语法困扰,反而忽略了Gradle的知识,可以大致看下上篇文章Gradle系列第(一)篇—Groovy语法初探1。作为一个菜鸟,很想知道 Gradle 的脚本怎么去写,也看了很多网上的文章,大多都是从脚本的角度来介绍Gradle,给我的感觉就是,只记住参数怎么配置,却不知道它们都是函数调用,有相关API对应的。比如我们很常见的一

2016-12-14 16:42:22 1759

原创 Gradle系列第(一)篇---Groovy语法初探

一、从Java到Groovy的关系Groovy能直接接受你的Java代码,也就是说在Groovy中写java代码也是可以的,因为Groovy 是一门JVM 语言,也就是,Groovy 的代码最终也会被编译成JVM 字节码,交给虚拟机去执行,我们也可以直接反编译这些字节码文件。从一段你很熟悉的代码开始,在循环中打印三遍hello java。 public void printHello()

2016-12-14 16:41:43 584

原创 Android源码解析Window系列第(三)篇---WindowManager基本原理

前面的两篇博客,总结了一下Window的基本知识,我们知道Window是一个抽象的概念,每一个Window都对应着一个View,Window的呈现方式是View,View要依赖Window,View和Window最终要关联在一起。Activity在android中所起的作用主要是处理一些逻辑问题,比如生命周期的管理、建立窗口等。Window的层次关系就如下面画的一样。详细参考前面两篇博客。 And

2016-12-13 21:47:26 2334

原创 Android源码解析Window系列第(二)篇---Dialog加载绘制流程

上一篇分析了一下Activity的Window创建过程和Window与Activity是如何关联到一起的,通过上一篇,我们对Window有了基本的认识。这一篇分享一下我对Dialog加载绘制流程的理解。首先创建一个Dialog,回顾下创建Dialog的流程。public class MainActivity extends Activity { AlertDialog alertDialo

2016-12-12 22:34:32 650

原创 Android源码解析Window系列第(一)篇---Window的基本认识和Activity的Window创建过程

您可能听说过View ,ViewManager,Window,PhoneWindow,WindowManager,WindowManagerService,可是你知道这几个类是什么关系,干嘛用的。概括的来说,View是放在Window中的,Window是一个抽象类,它的具体实现是PhoneWindow,PhoneWindow还有个内部类DecorView,WindowManager是一个interf

2016-12-12 09:29:59 2157

原创 Android源码解析Handler系列第(五)篇 ---HandlerThread你用过吗?

Handler这个系列总共有5篇,这是最后一篇了。前面三篇博客,我们从源码的层面将Handler消息机制梳理了一遍,第四篇站在源码层之上回顾以前学习时候困惑的一些问题。OK,开始飙车了,学习HandlerThread,如果你还没有看过我之前的四篇文章,建议去了解,只有深入了解的东西,才能被记住。 Android源码解析Handler系列第(一)篇 — Message全局池 Android源码解析

2016-12-08 20:28:58 999

原创 Android源码解析Handler系列第(四)篇 --- 打破Handler那些困惑事儿

Handler这个总共有4篇,这是最后一篇,前面三篇博客,我们从源码的层面将Handler消息机制梳理了一遍,现在回头再看当时作为小白使用Hander所遇到的一些问题,显然,这些问题基本都可以做一个解释了。Android源码解析Handler系列第(一)篇 — Message全局池 Android源码解析Handler系列第(二)篇 — ThreadLocal详解 Android源码解析Hand

2016-12-05 19:43:38 564

原创 Android性能优化第(五)篇---Android UI渲染机制

优化性能一般从渲染,运算与内存,电量三个方面进行,今天开始说聊一聊Android的渲染机制,我们要知道Android系统每隔16ms就重新绘制一次Activity,也就是说,我们的应用必须在16ms内完成屏幕刷新的全部逻辑操作,即每一帧只能停留16ms,渲染机制说完之后,然后在说如何去优化UI。1、为什么是16ms16ms意味着1000/60hz,相当于60fps。这是因为人眼与大脑之间的协作无法感

2016-12-05 10:18:28 2635

原创 Android性能优化第(四)篇---Allaction Tracing追踪内存分配的轨迹

Allaction Tracing是追踪内存分配的工具,可以很直观的看到某个操作是如何一步步分配的。在Android性能优化第2篇—Memory Monitor检测内存泄露最后一点有简要提到过,现在具体研究一下,废话不多说,贴一下代码,我对这段代码进行内存分配追踪。public class LoginActivity extends AppCompatActivity { @Override

2016-12-05 10:17:18 1656

JAVA知识点的三十个经典回答

对JAVA基础而又很重要的知识的总结,可以看看,技术好的就不要看了,适合入门的人

2014-03-02

Thinking in java

JAVA公认的的经典之作,讲的很具体到位

2014-02-24

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除