
Android源码分析
文章平均质量分 73
zhq217217
只要不停地走,再慢也会超越所有人。。。
展开
-
Android 如何实现高效跨进程传递大数据
第一.可以实现进程间通信的方式1.管道,一对一通信,两次拷贝,不满足一对多和效率方面要求2.socket通信,一对多,性能太低,而且不安全3.共享内存,多对多,0拷贝,效率高,但是不安全4.binder,一对多,一次拷贝,效率高,实名安全第二.安卓系统中都用到了哪些进程间通信方式(应该是都用了)1.socket通信,SystemService进程和Zygote进程的通信方式就是scoket,那是因为Zygote进程是先创建的进程,是SystemService进程的父进程,因此只能作为原创 2022-05-22 17:04:32 · 2663 阅读 · 0 评论 -
AIDL角度分析binder
AIDL,应该说是所有用跨进程通信的最好选择,但是本身缺点也很大:1.两个应用进程必须要包名一致2.定义完方法后需要重新编译,特别是有parcable类型数据需要传递的时候,需要手动添加包3.自动编译生成的java类复杂看不懂那么为什么会有以上缺点呢?我们可不可以改进呢?答案是肯定的。我们先来看一个最基本的aidl:interface IRootService01 { //这是示例代码,可以注掉 void basicTypes(int anInt, long aLo原创 2022-04-09 11:21:43 · 2628 阅读 · 0 评论 -
进程间通信之Binder理解之一
这篇文章我觉得写进程间通信,写Binder的介绍,写的非常的好,读了以后对binder有了更深的理解。不过我觉得这篇文章写Binder,写的还是比较虚,都是一些跨进程啊什么的,不是很好理解。于是我根据这篇文章的理解,用App进程、类来模拟进程间通信的过程,自己手写了一个进程间通信。App进程:模拟安卓系统MyBinder类:模拟Binder类Process接口:表示进程ProcessA:A进程ProcessB:B进程SystemServiceManager:模拟系统SystemSe.原创 2022-04-01 19:24:55 · 477 阅读 · 0 评论 -
Lifecycle应用
上一篇文章分析了lifecycle的源码,源码真的很枯燥,不过有了上一篇的基础,我们再来分析lifecycle的应用就简单多了。lifecycle应用中最重要的两个类是:LifecycleOwner和LifecycleObserver ,前者是提供lifecycle生命周期的,后者是观察者,我们马上会分析源码,先看应用:自定义一个handler,解决内存泄漏问题:public class LifecycleHandler extends Handler implements Lifecyc...原创 2022-03-29 19:04:17 · 3326 阅读 · 0 评论 -
Lifecycle 源码分析
lifecycle 生命周期,是什么?为什么要设计这个?如何使用?是什么?生命周期的抽象类为什么要设计?我们都知道,activity和fragment等控件,都是有生命周期,而我们可以在各个生命周期内做相应的操作,比如说oncreate中创建对象,ondestory中销毁对象等。其实这样设计已经非常明确告诉了我们该在哪里做什么事情,但是最大的弊端就是,耦合性太高了,我们封装一些第三控件或者第三方库,会完全和我们的宿主耦合起来,这样就会造成如果使用方没有在相应的生命周期内调用我们的方法,则会出现一些b原创 2022-03-29 09:50:34 · 2904 阅读 · 0 评论 -
LiveData源码解析
上一篇文章中分析了ViewModel的源码,其中提到了viewmodel要配合着LiveData来一起使用,那么今天来分析一下LiveData的源码,看看怎么用,有什么注意点。第一部分:源码头文件翻译/** * LiveData is a data holder class that can be observed within a given lifecycle. //这是一个可以被lifecycle对象用来观察数据变化的类。 * This means that an {@link .原创 2022-03-25 14:22:52 · 2504 阅读 · 0 评论 -
JVM学习记录浅析二
上一篇文章主要记录了jvm类的加载机制,其实应该趁热打铁把类的加载机制应用- -TInker源码也一起解析的,由于工作原因,只能过两天再分析记录一下。今天主要来记录一下JVM中另外一个重要的模块,内存模型。linux中一切都是文件,但是我觉得在学习分析JVM中,一切皆是内存比较合适:栈空间:线程私有区域,分为方法栈、本地方法栈、程序计数器三部分堆:线程共有区域内存,所有创建的对象都会在堆中分配内存非堆(元空间):线程共有区域,主要保存解析完的类信息、静态变量、常量池,因此生命周期最...原创 2022-03-24 16:00:40 · 142 阅读 · 0 评论 -
ViewModel 源码解析
MVVM架构中,会用到ViewModel类,那么这个类原理是什么呢?有什么好处呢?第一部分:源码文档解析/** * ViewModel is a class that is responsible for preparing and managing the data for * an {@link android.app.Activity Activity} or a {@link androidx.fragment.app.Fragment Fragment}. //viewmod原创 2022-03-22 15:21:47 · 1303 阅读 · 0 评论 -
ButterKnife源码解析之---源码分析
上篇文章中我们看了ButterKnife的源码文档,看到了如何使用,那么这篇文章我们来分析具体原理。还是以activity中使用为例:public class ExampleActivity extends Activity { //给需要初始化的view添加注解,参数为id @BindView(R.id.title) EditText titleView; @BindView(R.id.subtitle) EditTe.原创 2022-03-19 15:51:53 · 1340 阅读 · 0 评论 -
ButterKnife源码解析之---基础文档
ButterKnife的基本使用请参考官方文档,不做过多介绍。其实第三方库在使用的时候,我们都可以从他的源码文档里,找到使用示例,所以我们先从源码的头文档分析起。我们看看源码文档里都给我们介绍了如何使用呢?ButterKnife类头文档原文如下:/** * Field and method binding for Android views. Use this class to simplify finding views and * attaching listeners by binding原创 2022-03-19 11:18:23 · 208 阅读 · 0 评论 -
数据结构随笔
常见的数据结构我们都知道有:队列、栈、数组、链表、树(二叉树、红黑树等)、图,那么怎么记会更好理解呢?还是要从特点出发:1.队列:没有固定的实现方式,可以用数组实现,也可以用链表实现,特点就是先进先出。数据有序,但是数据之间可以没有任何关联2.栈:没有固定的实现方式,可以用数组实现,也可以用链表实现,特点就是先进后出,后进先出。数据也是有序的,但是数据之间可以没有任何关联3.数组:一群没有任何关联的数,按照一定的规则放到一起,数据是有序的。特点就是容量固定,根据下角标查找快,增删慢4.链表:原创 2022-03-12 16:37:16 · 1206 阅读 · 0 评论 -
EventBus源码解析
今天开始拆分EventBus源码,废话少说,五步骤,如何使用,源码解析,学到了什么,有什么不足之处第一部分:如何使用 //第二步:注册 接收类 EventBus.getDefault().register(this); //第三步,发送事件 发送事件 事件参数 EventBus.getDefault().post(new Object()); //第四步,注销注册 EventBus.g原创 2022-03-12 10:14:41 · 2696 阅读 · 0 评论 -
android源码解析(4)--如何结束运行中的分线程
正好最近没有工作,可以安心整理一些知识点,今天来分析一个问题:如何结束一个运行中的子线程?好了,我们先模拟你下问题,代码如下: public void login(final String userName, final String password, final OnLoginListener onLoginListener) { onLoginListener.o原创 2017-03-18 17:15:09 · 732 阅读 · 0 评论 -
android源码解析(3)--handler消息机制
最近正在找工作,正好也有时候整理整理知识点。今天整理一下Android的消息机制,这个也是面试当中必问的知识点了。 1.先看看我们是如何使用的 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceSta原创 2017-03-16 12:28:58 · 489 阅读 · 0 评论 -
android源码解析(2)--如何读取自定义属性
自定义view当中肯定会用到自定义属性,那么如何读取使用自定义属性呢?先推荐大神的文章 http://blog.youkuaiyun.com/lmj623565791/article/details/24252901 但是呢,他这篇文章里有一个地方没说太明白,就是如何使用枚举类型的自定义属性,下面就通过阅读源码模仿Imageview的scaleType来写的如何读取自定义枚举类型属性: 1原创 2017-03-01 15:31:24 · 397 阅读 · 0 评论 -
android源码解析(6)--HandlerThread分析及使用对比
昨天面试被问到handlerthread了,然后居然不知道,瞬间觉得技术很次啊,回来恶补一下,记录一下,一。如何使用public class HandlerThreadActivity extends Activity { /** * 创建一个HandlerThread */ private HandlerThread mTestHandlerThread;原创 2017-03-21 18:22:44 · 399 阅读 · 0 评论 -
android源码解析(5)--AsyncTask源码分析以及使用中的坑
android源码解析(5)--AsyncTask源码分析以及使用中的坑原创 2017-03-19 22:28:26 · 323 阅读 · 0 评论 -
android源码解析(1)--如何处理布局文件中添加的点击事件
我们都知道给view设置点击事件有三种方式: 第一种:View.setOnClickLintener(new OnClicklistener(...)); 第二种:View.setOnClickListener(this); 然后让class去实现点击事件 第三种:xml文件中写onClick="XXXX";然后在activity中写方法原创 2017-03-01 14:38:09 · 1800 阅读 · 0 评论