自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (1)
  • 收藏
  • 关注

原创 JetPack学习笔记之DataBinding

概念DataBinding是Google为了Android能够更好地实现MVVM架构而设计的,可以减轻页面(Activity/Fragment)的工作量,让布局承担一部分原本属于页面的工作。有如下特点:项目更简洁,可读性更高 不再需要findViewById UI控件能直接与数据模型中的字段绑定,甚至能响应用户的交互基本使用...

2020-08-16 18:55:20 394

原创 JetPack学习笔记之LiveData

概念在JetPack学习笔记之ViewModel中,当数据发生变化时,我们是可以采用接口的方式实现对页面的通知的,比如将计数显示到Activity中。通过接口的方式对页面进行通知是可行的,但如果要观察的数据很多,则需要定义大量的接口,代码显得十分冗余。为此,Jetpack提供了LiveData组件。LiveData是一个可被观察的数据容器类。具体来说,可以将LiveData理解为一个数据的容器,它将数据包装起来,是数据成为被观察者,当该数据发生变化时,观察者能够获得通知。我们不需要自己去实现观察者模

2020-08-09 20:46:15 429

原创 Jetpack学习笔记之ViewModel

概念Android为我们提供了ViewModel类,专门用于存放应用程序页面所需的数据。也可以这样理解:它是介于View和Model之间的一个东西。它起到了桥梁的作用,使视图和数据既能分离开,也能够保持通信。这样更符合“单一职责原则”,页面负责展示数据以及处理用户交互。官方注释:ViewModels usually expose this information via {@link LiveData} or Android DataBinding. You can also use any

2020-08-09 18:03:08 385

原创 JetPack学习笔记之LifeCycle原理

基本概念LifeCycle的原理Jetpack为我们提供了两个接口:LifecycleOwner(被观察者)和LifecycleObserver(观察者)。即通过观察者模式,实现对页面生命周期的监听。- LifeCycleOwnerpublic interface LifecycleOwner { /** * Returns the Lifecycle of the provider. * * @return The lifecycle of ..

2020-08-08 23:42:24 203

原创 嵌套滑动温习小结

NestedScrollingParent:以下简称“NSP”,NestedScrollingChild:以下简称“NSC”,这两个接口是嵌套滑动的精髓,是我们实现嵌套滑动遵守的“规则”。NOTE:本博文非详细原理篇,原理分析网上资料很多!!与传统事件分发相比,好在哪?方向维度 - 传统事件分发机制 方向:父控件 -> 子控件,且是一锤子买卖,即事件总是先...

2019-12-14 22:24:04 147

原创 自定义View、ViewGroup(温习&实战&笔记)

自定义View、ViewGroup的最基本的支持要点 自定义View - onMeasure、onDraw wrap_content; padding;自定义ViewGroup -onMeasure、onLayoutwrap_content; padding; margin;为啥View只需支持padding,而ViewGroup需要支持padding和margin...

2019-11-24 00:12:35 366

原创 重温Android中的线程、线程池源码

本篇博文涉及到的一些Android中常用的线程相关知识,源码也比较简单,作为重温笔记。Android中的线程、线程池,,如下图所示:AsyncTask 上述方法的执行顺序是:1 -> 2-> 3-> 4对于AsyncTask有如下几点可以从源码中得到验证AsyncTask的对象必须在主线程中创建(非必须,后面会...

2019-10-22 08:39:41 170

原创 Android 事件传递流程 - 基于WMS、IMS、ViewRootImpl等学习笔记

概述在Android中,Touch事件的分发分服务端和应用端。在服务端由WindowManagerService(借助InputManagerService)负责采集和分发的,在应用端则是由ViewRootImpl(内部有一个mView变量指向View树的根,负责控制View树的UI绘制和事件消息的分发)负责分发的。WMS在启动之后,经过逐层的调用,在Native层启动两个线程:Input...

2019-09-14 13:52:48 1395

原创 Android系统启动学习随记

init进程init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。Zygote进程在Android系统中,DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程...

2019-09-10 07:47:10 162

原创 Window和WindowManager学习笔记

WindowWindow表示一个窗口的概念,同时Window也是一个抽象的概念,Window是一个抽象类,其具体实现是PhoneWindow。/** * Abstract base class for a top-level window look and behavior policy. An * instance of this class should be used as ...

2019-09-07 18:16:17 244

原创 React Native学习速记

学习路线建议:ES5/6 -> React -> React Native -> Redux + React-Navigation等ES5:https://wangdoc.com/javascript/ ES6:http://es6.ruanyifeng.com/ React/ React Native :官方文档即可 -https://reactnative.cn...

2019-08-09 07:37:32 245

原创 Android IPC原理分析小结

简介理解Android的跨进程通信原理的关键是Binder。Binder是Android中独有的跨进程通信方式,底层的支持是Binder Driver,需要知道的是Linux 内核中并不包含Binder Driver,也就是说Linux并不对Android中的Binder跨进程通信方式提供支持。跨进程通信是需要内核空间作为支持的。传统的IPC机制如管道、Socket都是内核的一部分,因此通...

2019-08-03 13:44:38 640

原创 自定义View - 三大流程 - 学习小结

学习资源来源:https://www.jianshu.com/nb/9976005measure、draw均为调度方法。具体的施工由onMeasure、onDraw实现。layout方法确定View本身的位置,而onLayout方法会确定所有子元素的位置;因此,对于单一View的layout过程:由于单一View是没有子View的,故onLayout()是一个空实现,具体布局实现在layo...

2019-07-27 21:55:35 206

原创 自定义View、事件体系等基础温习笔记

学习笔记,备忘。完整学习资源:hencoder一、Canvas 的 drawXXX() 系列方法及Paint最常见的使用Canvas类下的所有的draw-打头的方法绘制常规的指定图形:drawCircle、drawBitmap等 绘制自定义图形:drawPath(Path path, Paint paint)Path的相关方法,细分为两类:addXxx - 添加子图形,如ad...

2019-07-25 08:35:43 307

原创 Flutter 入门项目 - 实战 + 分析

一、效果图项目地址:https://github.com/sparkerandroid/wanandroid_flutter项目使用的接口:玩安卓、Gank,开放的api。感谢。二、项目概览dao:通过http,负责接口的调用;model:数据解析;navigator:页面导航;pages:页面;util:工具类,比如webView的封装;widget:...

2019-07-08 18:57:00 4179

原创 Flutter 布局 - UI - 官方文档 - 学习速记(二)

widget与Element在Flutter中,Widget的功能是“描述一个UI元素的配置数据”。即:Widget其实并不是表示最终绘制在设备屏幕上的显示元素,而只是显示元素的一个配置数据。实际上,Flutter中真正代表屏幕上显示元素的类是Element,也就是说Widget只是描述Element的一个配置。总结:Widget实际上就是Element的配置数据,Widget树实际上是...

2019-07-07 11:55:53 413

原创 Flutter 布局 - UI - 官方文档 - 学习速记(一)

设置crossAxisAlignment属性值为CrossAxisAlignment.start,这会将该列中的子项左对齐。 获取主题色:Theme.of(context).primaryColor; // The theme depends on the BuildContext because different parts of the tree // can have di...

2019-06-19 17:53:16 760

原创 flutter入门 - 基础 - 学习笔记

Fultter学习资源相关:入门必备 - Dart、Dart学习笔记 Flutter中文网、英文官网 一本不错的入门电子书籍 Flutter开发必备 - Dart仓库,你需要的这里都有 清华大学Flutter镜像 flutter SDK 中examples文件夹下的各个示例项目学习路线建议:Dart -> Flutter【直接品尝官方学习文档即可轻松入门 - 利用上述学习资源...

2019-05-22 06:36:46 929

原创 Dart2基础

学习Flutter的第一步是学习Dart语言,然后才是学习Flutter本身。如果你学习KotlinOr Java,那么学习起来很容易入门。因为你会看到很多你熟悉的语法。仅做学习笔记,详细内容可品尝:英文官网:https://dart.dev/guides/language/language-tour中文:https://dartcn.com/guides/language/lan...

2019-05-21 08:37:51 1056

原创 “自动抢红包”、“智能安装”的本质 - 辅助服务(Accessibility Service)

一、辅助服务的本质辅助服务是谷歌推出旨在帮助身体残疾或不方便操作手机的人,更好的和设备进行交互。国内环境下,对于辅助服务的使用似乎偏离的谷歌的初衷,比如“自动抢红包”等,感觉被玩坏了。从技术的角度看,辅助服务的本质就是一个Service,只是这个Service比较特殊,为什么这么说呢?因为这个Service只能由系统绑定,即生命周期由系统管理。还有一点就是辅助服务的启用,必须用户手动开...

2019-04-30 19:09:48 522

原创 极客 - “Java核心技术”笔记 - part1

问题1:谈谈你对Java平台的理解,“Java是解释执行”这句话正确吗?对于Java平台的理解,可以从很多方面谈一下。上图是一个相对宽泛的蓝图,可以作为回答这个问题的蓝图。这个说法是不准确的。Java的源代码,首先经过Javac编译器编译成字节码文件,然后,在运行时,通过JVM内嵌的解释器将字节码转换为最终的机器码。但是,常见的JVM,比如我们大多数情况使用的Oracle JDK提供的...

2019-03-28 16:00:29 182

原创 路由组件核心原理探究 - 手写一个ARouter

本篇博文基于自己实现的路由组件,主要功能包括Activity路由跳转,支持自定义服务。代码实现比较简单,重在探讨路由组件的核心原理,如需品尝功能更全、代码更屌的框架,可以直接前往ARouter,下载源码,即可。手写一个ARouter;一、核心原理还是那句话,没什么是一张图解决不了的问题,如果有,那就是两张。O(∩_∩)O路由组件的核心原理,如上图所示:共分为两大部分:编译时...

2019-03-24 20:36:20 781

原创 组件化开发基础

一、组件化基础1.1、组件化与模块化区别模块:模块指的是独立的业务模块,比如首页模块、商城模块等。组件:组件指的是单一的功能组件,如 登录组件、支付组件等,每个组件都可以以一个单独的 module 开发。由此来看,模块和 组件间最明显的区别就是模块相对与组件来说粒度更大,一个模块中可能包含多个组件。模块化是业务导向,组件化是功能导向。1.2、GradleGradl...

2019-03-24 17:56:52 224

原创 Gradle高级自定义、多项目构建

一、高级自定义1.1、使用共享库Android的包(比如android.app、android.content、android.view、android.widget等)默认都是包含在Android SDK里面的,所有的应用都可以直接使用它们,系统会帮我们自动链接它们,不会出现找不到相关类的情况。还有一些库,比如com.google.android.maps、android.test.ru...

2019-03-03 22:40:35 250

原创 Gradle插件相关、属性配置

一、应用插件1.1、插件的类型a)二进制插件 - 实现了org.gradle.api.Plugins接口,二进制插件一般都是被打包到一个jar里单独发布的,比如我们的自定义插件。b)脚本插件(xxx.gradle)1.2、应用插件的方式使用的是Project.apply方法。/** * Applies zero or more plugins or script...

2019-03-02 21:41:06 1162

原创 Gradle Task

所有Gradle的构建工作都是由Tasks组合完成的。1、多种方式创建任务在gradle中,可以有多种方式创建任务。这依赖于Project给我们提供的快捷方法以及TaskContainer提供相关的Create方法。1.1、直接以任务的名字创建任务 Task task(String name) throws InvalidUserDataException;1.2、任务...

2019-02-27 08:51:14 715

原创 Gradle - 构建基础

subprojects { apply plugin:'java' repositories{ jcenter() }}我们可以在rootProject中对子Project进行统一的配置,但是不要误以为subProjects只能配置,它们只是两个方法,接受一个闭包作为参数,对工程进行遍历。遍历的过程中调用我们自定义的闭包,所以我们可以在闭包里面配置、...

2019-02-24 18:47:18 362

原创 Groovy基础

Groovy是基于JVM虚拟机的一种动态语言,它的语法和Java非常的相似,Groovy完全兼容Java,又在此基础上增加了很多动态类型和灵活的特性,比如支持闭包,支持DSL,是一门非常灵活的动态脚本语言。换句话说就是让你像写Java一样编写配置脚本。每个gradle的build脚本文件都是一个Groovy脚本文件,你可以在里面写任何符合Groovy语法的代码,比如定义类、声明函数、定义变量等...

2019-02-24 16:35:05 349

原创 Gradle基本常识

1. 环境搭建(windows)a)安装了JDK,并配置了JAVA_HOME环境变量;b)在gradle官网https://gradle.org/下载Gradle SDK,比如gradle-2.14.1-all.zip,解压到相关目录,添加GRADLE_HOME环境变量,然后把GRADLE_HOME/bin添加到Path环境变量中;2. build.gradle该文件是gradle...

2019-02-21 22:22:30 856

原创 Android 开发必备 - Java知识点总结

对象对象的生成与DCL失效问题在Java中生成一个对象很简单,如下:Person p = new Person();简单的一行代码实际在背后执行的了三个操作:a)给实例分配内存;b)调用构造函数,初始化成员字段;c)将p对象指向分配的内存空间(此时p不为null了);由于Java编译器允许“指令重排序”,因此第二步和第三步可以不按序执行,也就是执行顺序可以是a -...

2018-10-20 15:53:12 857

原创 Android 通知相关适配及总结

一、高版本适配之渠道       targetVersion为Android 8.0及以上的版本,需要创建通知的渠道(channel),否则就不会显示通知。(注:渠道的创建不会影响低版本,低版本会忽略渠道)private fun createNotificationChannel() { // Create the NotificationChannel, but only on...

2018-09-30 17:44:47 768

原创 Koltin - Koltin与Java互相调用

1、Kotlin调用Java1.1、属性Kotlin调用属性实际上就是访问getter、setter方法,因此Java类只要提供了getter方法,Kotlin就可将其当成只读属性。如果Java类提供了getter、setter方法,Kotlin就可将其当成读写属性。注:其实Java是否包含了成员变量不重要,关键是getter、setter方法。如果getter方法的返回值类型是b...

2018-08-19 20:05:57 1117

原创 Koltin - 异常处理、泛型

异常处理 与Java的异常处理机制相比,Koltin抛弃了checked异常,相当于所有异常都是runtime异常,这意味着开发者想要捕获异常就捕获,不想捕获异常也行,不需要使用throws关键字声明抛出异常。 如果在执行try块中的业务逻辑代码时出现了异常,系统将自动生成一个异常对象,该异常对象会被提交到运行时环境,这个过程被称为抛出异常。 除非在try块、catch块中调...

2018-08-19 19:58:58 327

原创 Kotlin - 面向对象(下)

概览: 扩展:Kotlin提供了扩展机制,通过扩展机制可以弥补Java作为静态语言灵活性不足的问题; Koltin默认为所有类、方法、属性都提供了final关键字来修饰,这意味着在默认情况下,Kotlin的类不可派生子类、方法、属性不可被重写,为了取消默认的final修饰符,Kotlin提供了final的反义词:open。 与Java内部类相似,Kotlin提供了嵌套类和...

2018-08-19 19:47:57 234

原创 Koltin - 面向对象(上)

Kotlin支持面向对象的三大特征:继承、多态、封装。提供了private、protected、internal、public四个访问权限修饰符。1、Kotlin定义类,语法:[修饰符] class 类名 [constructor 主构造器]{零到多个次构造器零到多个属性零到多个方法}修饰符:可以是public|internal|private(只能出现其中之一)、fi...

2018-08-19 18:43:32 366

原创 Koltin - 函数与Lambda表达式

1、Koltin对Java的纯粹面向对象进行了弥补,增加了函数式编程的支持。即Kotlin融合了面向过程和面向对象语言的特征,因此Kotlin完全支持定义函数和调用函数。Kotlin的函数比C语言的函数更强大,Kotlin支持局部函数(实际上局部函数是Lambda表达式的基础)。==> 函数是Kotlin中非常重要的一个知识点!!!2、fun 函数名(形参列表)[:返回值类型]{...

2018-08-19 18:04:14 371

原创 Koltin - 基础类型、运算符与表达式、流程控制、数组与集合

该系列的博文是自己学习Kotlin的学习笔记整理,以备忘与回顾。整理来源 - 疯狂Koltin讲义Kotlin预备知识1、kotlin 是一门强类型语言;2、kotlin-stdlib.jar是Kotlin运行时环境Kotlin可以自由调用Java的各种库,因此使用kotlin调用Android应用程序的Framework层开发应用程序甚至无序额外的学习,可以无缝的过渡到使用kot...

2018-08-19 17:35:23 824

原创 Binder原理

在阅读本篇文章之前,建议先阅读一下这篇文章。一、概述本篇博文的目的是学习整理,以备忘。二、Binder的优势 Andriod系统是基于Linux内核的,Linux已经提供了管道、消息队列、Socket等IPC机制。为啥Android还要自己搞Binder来实现IPC的。共享内存虽然不需要数据拷贝,但是控制复杂。Socket作为一款通用接口,其传输效率低,开销大...

2018-04-21 19:26:46 529

原创 EventBus原理与源码解析

一、概述       EventBus是针对Android优化的发布-订阅事件总线,简化了Android组件间的通信。EventBus以其简单易懂、优雅、开销小等优点而备受欢迎。      关于EventBus的基本使用不再详述,网上的资料很多,可以自行学习,或者直接去GitHub上查看基本使用方法。      在讲解源码之前,先说一下EventBus需要关注的点 - EventBus支持的四种线...

2018-04-15 15:39:58 6848 1

原创 HenCoder自定义View学习整理

从HenCoder大牛写的第一篇关于RxJava的文章开始,就一直在关注他。其自定义View系列文章可以说是一大福利,如果更新的速度再快一些,就完美了,哈哈。最近有时间将其自定义View系列文章学习了一遍,收获颇多,通过思维导图的形式总结出来,备忘。1、绘制基础2、Paint详解3、文字的绘制4、Canvas对绘制的辅助5、View的绘制顺序5.1、绘制顺序...

2018-03-01 13:29:03 516

动态代理及生成的代理类

动态代理及其生成的代理类,可以反编译查看其类的结构。

2017-12-06

空空如也

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

TA关注的人

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