
Android基础
文章平均质量分 94
我叫菜鸡
Day day up.
展开
-
Activity启动2-startActivityMayWait方法
我们从上一节分析参数开始最终达到:result = mInterface.startActivityAndWait(null, null, intent, mimeType, null, null, 0, mStartFlags, profilerInfo, ...原创 2018-10-21 18:49:20 · 3195 阅读 · 0 评论 -
Activity启动1_参数解析
Am.javapublic static void main(String[] args) { (new Am()).run(args);}public void run(String[] args) { if (args.length < 1) { onShowUsage(System.out); return; } ...原创 2018-10-21 17:12:24 · 2476 阅读 · 0 评论 -
log分析
log分析用于定位一些无法断点调试的一些疑难杂症。所以需要熟悉bugreport到底有哪些内容,哪些模块都打印log。读完下文你会有不一样的认识。基于Android O源码命令:adb bugreport > bugreport.txt源码:#include <errno.h>#include <stdio.h>#include <sys/sock...原创 2018-10-14 19:48:22 · 3135 阅读 · 0 评论 -
Glide附件难点之上篇源码文章
注册Glide.Glide()GenericLoaderFactory的注册register(File.class, ParcelFileDescriptor.class, new FileDescriptorFileLoader.Factory());register(File.class, InputStream.class, new StreamFileLoader.Fact...原创 2018-10-14 14:44:53 · 304 阅读 · 0 评论 -
Glide源码基本流程跑通
withpublic static RequestManager with(Activity activity) { //单例返回RequestManagerRetriever对象,构造中对应主线程 RequestManagerRetriever retriever = RequestManagerRetriever.get(); //多个重载方法 return ...原创 2018-10-14 14:38:28 · 259 阅读 · 0 评论 -
主dex类的划分规则
执行task的入口代码:// ---------// create the transform that's going to take the code and the proguard keep list// from above and compute the main class list.Transform multiDexTransform;if (usingIncreme...原创 2018-10-05 17:09:52 · 860 阅读 · 0 评论 -
Volley源码分析
1. 创建一个请求队列RequestQueue queue = Volley.newRequestQueue(context)对应源码分析:public static RequestQueue newRequestQueue(Context context, BaseHttpStack stack) { BasicNetwork network; if ...原创 2018-08-14 13:34:23 · 231 阅读 · 0 评论 -
Android异步处理
Android异步处理大家好,我叫王菜鸟,今天给大家分享的内容是Android中异步的处理。那下面我们就从几个方面开始介绍Android中的异步操作。什么是同步,什么是异步。为什么要异步?Android中异步有哪些?对应这些异步操作的原理是什么?如何进行异步操作?什么是同步,什么是异步?同步,异步可以理解成是形容词,修饰一次方法的调用,同步方法一旦开始,调用者必须等到...原创 2018-06-24 18:33:34 · 2486 阅读 · 0 评论 -
VirtualAPK滴滴插件化框架源码深入解读
初始化部分PluginManager.getInstance(base).init();保证单例private static volatile PluginManager sInstance = null;public static PluginManager getInstance(Context base) { if (sInstance == null) { ...原创 2018-06-12 19:45:02 · 532 阅读 · 0 评论 -
LinkedBlockingQueue与生产消费模型
生产消费模型ReentrantLock提供了tryLock方法,tryLock调用的时候,如果锁被其他线程持有,那么tryLock会立即返回,返回结果为false;如果锁没有被其他线程持有,那么当前调用线程会持有锁,并且tryLock返回的结果为true。对于ReentrantLock来说,还有一个十分实用的特性,它可以同时绑定多个Condition条件,以实现更精细化的同步控制。 R...原创 2018-06-05 12:01:30 · 725 阅读 · 0 评论 -
最简单的生产者消费者demo
package demo1;import java.util.Queue;public class Consumer extends Thread { private final Queue sharedQ; public Consumer(Queue sharedQ) { super("Consumer"); this.sharedQ = ...原创 2018-06-04 18:07:42 · 1359 阅读 · 0 评论 -
ThreadLocal源码分析
我们不从把ThreadLocal源码直接复制到这里进行挨个分析,我们把使用列出来,找出突破点进行分析public static final ThreadLocal<String> mThreadLocal = new ThreadLocal<String>() ; public static void main(String[] args) { ...原创 2018-06-04 18:07:10 · 168 阅读 · 0 评论 -
Android View 绘制原理
我想了想,如果直接从ViewGroup里面的方法谈起,可能和网上很多博客一样了,但是如果只是向framework开发者分析哪些,又分析不到应用层,所以我觉得应该从performDraw()这个方法开始分析绘制,因为如果在向framework层深入,那就会接触到WindowManagerService,这个过程需要掌握Binder知识,但是Binder知识很多人一时半会掌握不了,尤其是对于appli...原创 2018-06-01 16:09:09 · 1491 阅读 · 0 评论 -
Android View排版原理
由于performLayout之前是performMeasure()操作,所以不熟悉测量的小伙伴看我上一篇博客Android View 测量原理 我想了想,如果直接从ViewGroup里面的方法谈起,可能和网上很多博客一样了,但是如果只是向framework开发者分析哪些,又分析不到应用层,所以我觉得应该从performLayout()这个方法开始分析测量,因为如果在向framework层深入,...原创 2018-06-01 14:52:33 · 449 阅读 · 0 评论 -
Android View 测量原理
MeasureSpec封装了父布局传递给子View的布局要求。MeasureSpec可以表示宽和高MeasureSpec由size和mode组成//获取大小或模式int specSize = MeasureSpec.getSize(measureSpec)int specMode = MeasureSpec.getMode(measureSpec)//设置int measu...原创 2018-06-01 10:37:38 · 587 阅读 · 0 评论 -
多次请求网络的小锅
bug描述今天有个bug需要我处理,业务逻辑是这样的:搜索框中的文本,对应一次请求。但是之前的代码逻辑是这样的,在子线程需要执行时进行判断是不是网络请求的结果可以从缓存中获取,如果不行则进行开启线程请求网络。用线程池管理,Executors.newSingleThreadExecutor(),乍眼看没什么问题,但是问题却很大,因为访问网络到结果放入缓存中这个过程是耗时的,但是其他部分的刷新...原创 2018-05-30 19:49:57 · 407 阅读 · 3 评论 -
Android中窗口添加的过程
Window的分类系统级Window : z-ordered为 2000-2999应用层Window : z-ordered为 1-99子Window : z-ordered为 1000-1999根据下面谷歌的Android层级图可以看出来WindowManager是在framework层掌管Window的 从代码上看WindowManager是一个接口,此接口继承自...原创 2018-05-29 11:43:38 · 1294 阅读 · 0 评论 -
include、merge、ViewStub分析
include、merge、ViewStub分析include的使用:<include android:id="@+id/my_layout" layout="@layout/include_layout" android:layout_width="wrap_content" android:layout_height="wrap_content...原创 2018-05-28 16:05:35 · 342 阅读 · 0 评论 -
通过堆栈看事件传输
如何调试事件传输在自己Activity中打印下堆栈 @Override public boolean dispatchTouchEvent(MotionEvent ev) { Thread.dumpStack(); return super.dispatchTouchEvent(ev);}W/System.err: java.lang.Throwabl...原创 2018-04-10 15:13:20 · 557 阅读 · 0 评论 -
Hook技术(五)如何Hook系统中任意服务
获取服务&注册 ServiceManager.getService()public static IBinder getService(String name) { try { IBinder service = sCache.get(name); //先从缓存中查看 if (service != null) { ...原创 2018-03-15 15:48:58 · 6265 阅读 · 3 评论 -
Hook技术(四)对系统启动Activity进行Hook之偷梁换柱Activity
引出问题我们如果要启动一个activity,我们的做法是1. 在AndroidManifest.xml中声明一个Activity 2. startActivity,如果不在AndroidManifest.xml中声明,启动activity会报错(android.content.ActivityNotFoundException)。但是我们想,我们使用插件化,按照正常的思维是不是要将插件化中的所...原创 2018-03-12 18:05:05 · 2487 阅读 · 3 评论 -
hook技术(三)对AMS&PMS进行Hook
本文基于Android系统源码8.0版本进行hook抛出问题AMS是什么?从启动Activity的角度看app如何和AMS交互hook点在哪里?AMS是什么?AMS是Android框架层用来管理四大组件的管家类并且负责进程的启动消亡和优先级的调度,是Android系统的核心服务。从启动Activity的角度看app如何和AMS交互我们知道activity...原创 2018-03-12 13:08:11 · 1864 阅读 · 0 评论 -
Hook技术(二)对系统服务Hook
上一次,我们用Hook技术对startActivity进行了操作。我们这一届继续Hook一些比较深入的东西。更加深入的理解Hook。通过上一次,我们小结,Hook就是用我们的代理去替换原本的服务,然后达到拓展的目的,甚至改变原有服务的目的。那我们今天就尝试改变系统剪贴板。要想改变系统剪贴板,我们就得了解剪贴板服务最基本的流程,从而我们好控制系统剪贴板的Hook点在哪里。 剪贴板服务的基...原创 2018-03-12 13:07:35 · 1055 阅读 · 0 评论 -
Hook技术(一)对startActivity进行简单Hook
目的这篇文章是让大家体会hook技术大概是什么样子,在那些地方可以应用到。后面文章将深入hook技术,以及解析市面上现有的hook开源框架原理。在前面的文章中我们已经说过什么是代理模式,那我们就先使用最简单的静态代理模式应用在我们的hook技术中。我们先复习一下静态代理模式。/** * 定义Demo接口 */ public interface Demo { ...原创 2018-03-12 13:07:03 · 1763 阅读 · 0 评论 -
java注解基础
一:元注解元注解的作用就是负责注解其他注解1.@Target 说明: 用来指明注解所修饰的目标,包括packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数) 取值: 值 作用 英文描述 CONSTRUCTOR 用于描...原创 2018-03-11 10:47:01 · 261 阅读 · 0 评论