- 博客(57)
- 资源 (17)
- 问答 (2)
- 收藏
- 关注
原创 Android6.0Framework源码解析系列[目录]
看前人在很久以前就达到我现在远远不及的高度,这让我觉得有些无力。也正是他们趟过的坑能指引我即将前进的路。所以我很庆幸。我庆幸有人指引,我庆幸我在前进。本着向大牛学习以及知其然知其所以然的精神,准备有目的、系统性的Read The Fucking Source Code。既当作自己的笔记,也希望可以帮助部分后来者。这是一篇已经阅读的Anroid6.0中Framework源码目录...
2016-08-10 18:46:44 9052 5
原创 Kotlin 一种以服务为基础的APP架构及源码示例
前言 由于工作原因,可能会被调到隔壁组。此架构为隔壁组leader设计,并不是我原创,已取得leader同意,此博文只分享我对此架构的理解。特此声明。最近看了下Kotlin的一些语法,外加隔壁组采用非常规MVC/MVP/MVVM开发,所以写此Demo,一是为了练习Kotlin语法,二是为了尝试使用隔壁组架构进行开发。由于为了练习Kotlin语法,所以在代码的具体实现上,可能会有些“炫...
2018-05-07 10:57:35 2824 2
原创 Android 【插件化】"偷梁换柱"的高手-VirtualApk源码解析
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。关于VirtualApk工程介绍初始化 : PluginManager.getInstance(base).init()hook Instrumentation and Hhook IActivityManager(AMS)加载插件 : PluginManager.getInstance(base)...
2018-04-12 14:28:30 3510 3
原创 Java 注解及注解处理器概述
元注解@Documented 注解是否将包含在JavaDoc中@Inherited 被注解类的子类是否会注解@Retention 注解保留位置@Target 注解的范围@Retention注解value属性的取值范围为枚举类RetentionPolicy的三个枚举值,SOURCE、CLASS和RUNTIME。分别对应注解的保留位置为.java源码、.class代码和字节码。S
2018-01-18 17:36:05 1002
原创 Java 并发基础学习
本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。三个基础概念原子性。一个操作或者一系列骚操作,要么全部执行要么全部不执行。数据库中的“事物”就是个典型的院子操作。可见性。当一个线程修改了共享属性的值,其它线程能立刻看到共享属性值的更改。举个例子:由于JMM(Java Memory Model)分为主存和工作内存,共享属性的修改过程为从主存中读取并复制到工作内存中,...
2018-01-09 14:28:19 1159 7
原创 Andorid 换肤框架AndSkin源码解析及优缺点
AndSkin简介及使用教程AndSkin gaybug: https://github.com/RrtoyewxXu/andSkinAndSkin 作者写的说明: http://blog.csdn.net/zhi184816/article/details/53436761AndSkin源码解析初始化BaseSkinApplication解析BaseSkinApplication中其实就一行初始化
2017-10-19 15:50:00 5405 12
原创 Android 顶级视图DecorView的前世今生
在Activity的启动过程中会执行ActivityThread#performLaunchActivity方法,其中调用Activity#attach。在attach()方法中实例化Activity持有的mWindow属性为Window的唯一实现类PhoneWindow。
2017-04-27 15:06:07 8897
原创 Android xUtils3源码解析之数据库模块
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。xUtil3支持数据库多库的配置,使用不同的DaoConfig,可以创建多个.db文件,每个.db文件彼此独立。由于xUtils3设计的是在需要使用数据库的时候,才创建数据表。所以下文以save操作为例,跟进初始化数据表的过程。示例代码:
2017-04-01 15:10:32 4982
原创 Android xUtils3源码解析之注解模块
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。真正的初始化是在这里。实际上这里称作“初始化”有些不太合适,因为xUtils3中View注解都是`@Retention(RetentionPolicy.RUNTIME)`类型的,运行时才是真正的初始化,
2017-04-01 15:09:16 5013 1
原创 Android xUtils3源码解析之图片模块
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。xUtils3源码解析之图片模块,图片加载所需要的一切,都在这里~
2017-03-30 09:43:54 4303 2
原创 Android xUtils3源码解析之网络模块
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。xUtils3四大模块:网络请求、图片加载、ORM框架和事件注解。本文阅读分析网络请求相关代码。使用版本:`compile 'org.xutils:xutils:3.3.36'`
2017-03-28 09:17:57 6379 4
原创 Android 从源码的角度带你完全解析AsyncTask
AsyncTask()解析 public AsyncTask() { mWorker = new WorkerRunnable<Params, Result>() { public Result call() throws Exception { mTaskInvoked.set(true);
2017-01-19 10:53:04 1498 1
原创 Android QA专用,Python实现不一样的多渠道打包工具
相对于美团打包方案,我为什么要写这个工具?除了Gradle的多渠道打包,目前最流行的应该是美团(美团Android自动化之旅—生成渠道包、美团Android自动化之旅—适配渠道包、Walle)使用Python直接添加渠道文件的打包方式了,速度真是杠杠的!但是,这里有一个问题:需要一个已签名无渠道号的APK,那么问题来了,这个APK哪里来的?懂行的朋友该说了,Gradle随便打个Release包不完事
2017-01-17 10:50:09 1824 2
翻译 Android package属性、package name和Application ID三者的联系及区别
名词解释package属性:在AndroidManifest.xml文件中。package name:应用程序的包名。Application ID:模块defaultConfig块下的applicationId属性。设置Application ID每个Android应用程序都有唯一一个类似Java包名的Application ID,比如com.example.myapp。在Android设备
2016-12-27 15:51:43 39413 6
原创 Python 模拟登录某SDN并解析返回数据
流程**三步**走:1. 打开登录页,获取`cookie`和验证信息(正则匹配的`lt`、`execution`和`_eventId`)。2. 模拟点击登录按钮,这一步需要构造登录表单完整数据,而且要加上`User-Agent`。3. 验证通过之后,就可以打开各种页面了~
2016-12-20 10:01:37 2185
原创 Android JNI之Java和C互相调用
概述JNI是什么JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。NDK是什么NDK是Native Development Kit的缩写。是SDK(software development kit)软件开发工具包的一部
2016-11-15 14:56:22 4499 1
原创 Android 使用WindowManager实现悬浮窗及源码解析
本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。一个Activity、一个Service和两个布局文件。布局十分简单,这里就不贴了,大概描述下。activity_main.xml中俩按钮,layout_window.xml中一个TextView。ok,首先看下MainActivity。MainActivity中只有俩按钮,点击启动WindowService,点击停止WindowService。
2016-10-24 09:18:08 14243 20
原创 Android Activity启动流程源码解析
在 Android Launcher启动应用程序流程源码解析一文中从点击应用程序图标startActivity()开始,一直讲解到Application和MainActivity的onCreate()方法被调用。中间流程有些高能,高能部分是两篇博文共有的地方,没办法绕开。本文主要讲述从Activity#onCreate()到Activity#onResume()的流程。想追本溯源的同学建议先阅读
2016-10-14 15:20:21 4047
原创 Android 手把手带你玩转自定义相机
本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。概述相机几乎是每个APP都要用到的功能,万一老板让你定制相机方不方?反正我是有点方。关于相机的两天奋斗总结免费送给你。
2016-10-12 11:21:58 16150 42
原创 Android APP必备高级功能,消息推送之MQTT
本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。1. Android端实现消息推送的几种方式轮询:客户端定时向服务器请求数据。伪推送。缺点:费电,费流量。拦截短信消息。服务器需要向客户端发通知时,发送一条短信,客户端收到特定短信之后,先获取信息,然后拦截短信。伪推送。缺点:贵而且短信可能被安全软件拦截。持久连接(Push)方式:客户端和服务器之间建立长久连接。真正的推送。
2016-10-10 09:15:24 55561 62
原创 Android 高级自定义Toast及源码解析
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。Toast概述Toast的作用不需要和用户交互的提示框。更多参见官网:https://developer.android.com/guide/topics/ui/notifiers/toasts.htmlToast的简单使用
2016-10-08 09:27:41 8014 7
原创 Android XML布局文件解析过程源码解析
`mLayoutInflater.inflate(layoutResID, mContentParent)`。这行代码的作用是将我们的activity_main.xml填充到mContentParent中去。详见:[setContentView源码解析]。那么,这行代码怎么就将xml文件转换成了View或者ViewGroup了呢?
2016-08-22 09:47:52 7630 1
原创 Android setContentView()源码解析
前言在Activity中一般第一句就是调用setContentView(R.layout.XXX),但这其中系统做了那些工作?我们知道,在ClassLoader装载了MainActivity之后,首先创建了Application,之后依次调用Application对象的onAttach和onCreate()方法。然后顺序调用第一个Activity的onAttach和onCreate()方法
2016-08-22 09:05:00 3019
原创 Android Launcher启动应用程序流程源码解析
带着问题看源码点击桌面Launcher图标后做了哪些工作?应用程序什么时候被创建的?Application和MainActivity的onCreate()方法什么时候被调用的?概述在Android系统中,启动四大组件中的任何一个都可以启动应用程序。但绝大部分时候我们是通过点击Launcher图标启动应用程序。本文依据Android6.0源码,从点击Launcher图标,直至解析到MainAc
2016-08-15 13:19:06 7025 3
原创 Android SystemServer启动流程源码解析
简介Android系统中各个进程的先后顺序为:init进程 –-> Zygote进程 –> SystemServer进程 –>应用进程其中Zygote进程由init进程启动,SystemServer进程和应用进程由Zygote进程启动。本文依据6.0源码,主要分析SystemServer进程的启动流程。注意,是启动流程,不是启动过程。启动过程的解析可以移步我的另一片博文Zygote启动流程源码解
2016-08-08 09:27:52 4221 9
原创 Android Zygote启动流程源码解析
本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。Zygote进程是Android和Java世界的开创者。在Android系统中,所有的应用进程和SystemServer进程都是由Zygote进程fork而来。其重要性由此可见一斑。虽然Zygote进程相当于Android系统的根进程,但是事实上它也是由Linux系统的init进程启动的。
2016-07-29 08:57:38 5840 8
原创 Android EventBus3.0使用及源码解析
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。# EventBus3.0简介`EventBus`是greenrobot出品的一个用于Android中事件发布/订阅的库。以前传递对象可能通过接口、广播、文件等等,尤其像同一个`Activity`两个`Fragment`之间采用接口传递对象,十分的麻烦,而且耦合度较高。使用`EventBus`之后,这些将不再是问题。
2016-07-10 18:49:00 8091
原创 Android LinearLayout实现下拉刷新
效果图实现思路一般刷新给ListView设置addHeaderView,这里我们可以模仿着这种方式实现可刷新的LinearLayout。然而LinearLayout并没有提供addHeaderView方法,既然不提供那么我们自己addView添加第一个View为我们下拉刷新的布局不就成了嘛。这里将添加的第一个View称为HeadView。初始化的时候隐藏HeadView,然后重写onTouchEve
2016-06-24 13:49:46 3868 1
原创 Android 内存泄露简介、典型情景及检测解决
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。什么是内存泄露?Android虚拟机的垃圾回收采用的是根搜索算法。GC会从根节点(GC Roots)开始对heap进行遍历。到最后,部分没有直接或者间接引用到GC Roots的就是需要回收的垃圾,会被GC回收掉。内存泄漏指的是进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引用到gc roots导致无法被GC回收。
2016-04-27 15:36:35 7789 2
原创 Android 代码混淆实战
本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。什么是代码混淆?Java 是一种跨平台的、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。我们可以使用 Java 混淆器对 Java 字节码进行混淆。
2016-04-25 17:40:04 3889
原创 Android MVC、MVP和MVVP的概念、运用及区别
MVC、MVP和MVVM都是为了解决界面呈现和逻辑代码分离而出现的模式。经典的MVC模式是M-V-X模式的老祖宗,MVP和MVVM都是在MVC的基础上演化而来。本文分为三个部分:1. 概述MVC、MVP和MVVM的概念、区别、以及适用场景。2. 用Demo演示MVP及MVVM的使用3. Demo源码下载
2016-04-15 13:44:47 21479 2
原创 Android 初探Retrofit2.0.1(最新版)
概述看见这段开头,你应该听过Retrofit的大名但是没有真正的运用过,或者用过Retrofit1.9但是没有跟上更新的进度。无论什么原因,你都该好好了解下这篇博客。1.9和2.0.1版本差别很大。网上相关的教程很少,又因为是初探,所以本篇博客会用一个Demo说明Retrofit2.0.1的用法, Retrofit GitHub地址:https://github.com/square/retro
2016-04-09 23:29:17 3615 1
原创 Android RxJava/RxAndroid结合Retrofit使用
概述RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上。告别迷之缩进。RxAndroid是RxJava针对Android平台的拓展。Retrofit是一个封装了okHttp的工具库,在上篇博文 Android 初探Retrofit2.0.1(最新版) 有过介绍,对Retrofit不太了
2016-04-07 19:52:30 12076 7
原创 Android 自定义View高级特效,神奇的贝塞尔曲线
本文已授权微信公众号《非著名程序员》原创首发,转载请务必注明出处。效果图效果图中我们实现了一个简单的随手指滑动的二阶贝塞尔曲线,还有一个复杂点的,穿越所有已知点的贝塞尔曲线。学会使用贝塞尔曲线后可以实现例如QQ红点滑动删除啦,360动态球啦,bulabula~什么是贝塞尔曲线? 贝赛尔曲线(Bézier曲线)是电脑图形学中相当重要的参数曲线。更高维度的贝塞尔曲线就称作贝塞尔曲面,贝塞尔三角是一种特殊的实例。
2016-03-31 15:52:16 12678 9
原创 Android AndFix热补丁动态修复框架使用教程
简介已经上线的项目发现BUG,紧急修复BUG发布新版本?No,也许你需要AndFix。AndFix 是阿里巴巴开源的 Android 应用热修复工具,帮助 Anroid 开发者修复应用的线上问题。Andfix 是 “Android hot-fix” 的缩写。支持 Android 2.3 - 6.0,ARM 和 x86 架构,dalvik 运行时和 art 运行时。AndFix 的分支是 .apatch文件。
2016-03-25 17:23:23 6207 2
原创 Android 百度鹰眼轨迹SDK(v2.1.6)
闲聊看过《鹰眼追击》这部电影的读者一定对“鹰眼”这台巨无霸计算机印象深刻,现在我们可以实现自己的鹰眼。效果图本篇为百度地图SDK第三篇博文第一篇实现:Android 百度地图周边雷达(v3.7.0)及覆盖物第二篇实现:Android 百度定位SDK(v3.7.0)结合方向传感器本博文为第三篇使用百度鹰眼轨迹SDK可以实现的功能轨迹追踪 借助GPS、基站、Wi-Fi和传感器信息,实现室内、外高精度
2016-03-22 17:57:27 11044 5
原创 Android 百度定位SDK(v6.1.3)结合方向传感器
概述这是第二篇关于百度地图SDK的博客。推荐阅读: Android 百度地图周边雷达(v6.1.3)Android 百度鹰眼轨迹SDK(v2.1.6)今天主要写百度地图定位和方向传感器结合这么一个中间块案例。流程申请密钥及相关配置请看:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/buildprojec初始化百度地图S
2016-03-22 11:06:32 4875 1
原创 Android 百度地图周边雷达(v6.1.3)及覆盖物
闲聊百度地图SDK 百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API、Web服务API、Android SDK、iOS SDK、定位SDK、车联网API、LBS云等多种开发工具与服务,提供基本地图展现、搜索、定位、逆/地理编码、路线规划、LBS云存储与检索等功能,适用于PC端、移动端、服务器等多种设备,多种操作系统下的地图应用开发。百度地图已经容
2016-03-21 16:24:07 6167 2
原创 Android 左滑or右滑抽屉菜单
概述本篇只是个示例,理解本篇博客后,可实现左侧滑动菜单、左右两侧滑动菜单。再加上各种缩放,平移特效。DuangDuang的。本篇效果如下: 实现步骤因为需要水平滑动,所以继承HorizontalScrollView本Domo分为两个部分mMainLayout和mRightLayout。在onMeasure初始化这两部分的宽度在onTouchEvent中判断是否完全展示,拦截当前触摸事件前三
2016-03-18 15:36:31 5153 7
原创 Android 四种线程池
为什么要使用线程池当同时并发多个网络线程时,引入线程池技术会极大地提高APP的性能。显著减少了创建线程的数目。防止内存过度消耗。控制活动线程的数量,防止并发线程过多。 使用条件:假设在一台APP完成一项任务的时间为T T1 创建线程的时间T2 在线程中执行任务的时间,包括线程间同步所需时间T3 线程销毁的时间 显然T = T1+T2+T3。注意这是一个极度简化的假设。可以看出
2016-03-16 16:51:38 13766 1
Volley.jar及源码
2016-03-11
ListView使用XUtils图片闪烁
2016-04-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人