自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

android开发笔记

android开发笔记

  • 博客(1754)
  • 资源 (14)
  • 收藏
  • 关注

转载 okhttp3源码分析:架构全面解析

一、摘要 okhttp3在android应用开发中是现今最牛(哔)的网络交易框架,不接受反驳。二、okhttp3源码地址okhttp3框架源码地址:https://github.com/square/okhttp三、okhttp3简单使用OkHttpClient client = new OkHttpClient.Builder().build();Requ...

2019-12-22 09:16:25 1381

原创 APP的启动过程(附图)

点击桌面APP图标时,Launcher的startActivity()方法,通过Binder通信,调用system_server进程中AMS服务的startActivity方法,发起启动请求 system_server进程接收到请求后,向Zygote进程发送创建进程的请求 Zygote进程fork出App进程,并执行ActivityThread的main方法,创建ActivityThrea...

2019-08-10 04:46:34 786

原创 SQLDatabase类中的insert方法nullColumnHack字段的含义

table 要插入数据的表的名称values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。conflictAlgon:冲突解决方案。例如当数据表主键的唯一性检测出错的时候,就会按照该值设定的值进行处理。nullColumnHack: 当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况...

2019-08-04 08:05:46 655

转载 Java8新特性--CompletableFuture

并发与并行Java 5并发库主要关注于异步任务的处理,它采用了这样一种模式,producer线程创建任务并且利用阻塞队列将其传递给任务的consumer。这种模型在Java 7和8中进一步发展,并且开始支持另外一种风格的任务执行,那就是将任务的数据集分解为子集,每个子集都可以由独立且同质的子任务来负责处理。这种风格的基础库也就是fork/join框架,它允许程序员规定数据集该如何进行...

2019-07-27 11:35:16 516

转载 编程的智慧

编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。反复推敲代码有些人喜欢炫耀自己写了多少多少万行的代码,仿佛代码的数量是衡量编程水平的...

2019-07-27 11:28:46 122

转载 什么是HTTPS协议?

HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。HTTP协议通过请求/响应的方式,在客户端和服务端之间进行通信。这一切看起来很美好,但是HTTP协议有一个致命的缺点:不够安全。HTTP协议的信息传输完全以明文方式,不做任何加密,相当于是在网络上“...

2019-06-24 06:47:57 645 1

原创 Android 之采用execSQL和rawQuery方法完成数据的添删改查操作

使用SQLiteDatabase操作SQLite数据库Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQue...

2019-06-24 06:46:44 3738

原创 okhttp3缓存设置及拦截器的使用

OkHttp是由Square发布的一个HTTP client,它支持高速缓存服务器响应.缓存:如果服务器支持缓存,请求返回的Response会带有这样的Header:Cache-Control, max-age=xxx,这种情况下我们只需要手动给okhttp设置缓存就可以让okhttp自动帮你缓存了。这里的max-age的值代表了缓存在你本地存放的时间。OkHttpClient ok...

2019-06-19 06:25:05 2185 1

转载 Glide原理(三):图片解析处理、ImageView保证大小

Glide 怎么判断解析图片的Glide 怎么保证ImageView宽高?Glide 怎么判断图片旋转角度以上三个问题是我自己在做一个图片池遇到的问题,趁机好好学习GlideGlide解码的类在 Downsampler中,它的注释上写着:Downsamples, decodes, and rotates images according to their exif orient...

2019-06-16 07:48:01 1604

转载 Glide原理分析(二):Engine加载流程

上一篇文章《Glide原理解析(一):加载流程分析》主要大致地分析了Glide加载图片的整体流程,这一篇主要解决的上一篇遗留的一个问题:Glide Engine 如何加载图片,内部涉及到Glide的缓存模块上篇文章在SingleRequest中获取到了ViewTarget的宽高之后(假定是ImageView),onSizeReady()调用了engine的load()方法loadSt...

2019-06-16 07:47:54 494

转载 Glide原理解析(一):加载流程分析

Glide 使用很简单:Glide.with(Context).load(url).into(View)所以,分成三个流程进行分析:1. with // Glide.java public static RequestManager with(@NonNull Activity activity) { return getRetriever(activity).g...

2019-06-16 07:47:47 1032

转载 Kotlin学习笔记:run、apply、let、also、with的用法和区别

run、apply、let、also和with五个函数均位于kotlin包下的Standard文件中,其含义和用法比较相似,现分别介绍如下。run用法1函数定义:public inline fun <R> run(block: () -> R): R = block()功能:调用run函数块。返回值为函数块最后一行,或者指定return表达...

2019-04-19 06:48:28 291

转载 Rxjava2入门教程六:Single、Completable、Maybe——简化版的Observable

在Rxjava2中,Observale和Flowable都是用来发射数据流的,但是,我们在实际应用中,很多时候,需要发射的数据并不是数据流的形式,而只是一条单一的数据,或者一条完成通知,或者一条错误通知。在这种情况下,我们再使用Observable或者Flowable就显得有点大材小用,于是,为了满足这种单一数据或通知的使用场景,便出现了Observable的简化版——Single、Complet...

2019-03-03 17:53:50 451

转载 Rxjava2入门教程五:Flowable背压支持——对Flowable最全面而详细的讲解

背压(backpressure)当上下游在不同的线程中,通过Observable发射,处理,响应数据流时,如果上游发射数据的速度快于下游接收处理数据的速度,这样对于那些没来得及处理的数据就会造成积压,这些数据既不会丢失,也不会被垃圾回收机制回收,而是存放在一个异步缓存池中,如果缓存池中的数据一直得不到处理,越积越多,最后就会造成内存溢出,这便是响应式编程中的背压(backpressure)问题...

2019-03-03 17:52:50 915

转载 Rxjava2入门教程四:Scheduler线程调度器

Scheduler(线程调度器)赋予RxJava简洁明了的异步操作,可以说是RxJava中最值得称道的地方。在之前的代码中,Observable发射数据流,Observer接收响应数据流,以及Operators加工数据流均是在同一个线程中,实现出来的是一个同步的函数响应式。但是函数响应式的实际应用却不是这样的,大部分都是后台处理,前台响应的一个过程。Observable生成发射数据流,以及Ope...

2019-03-03 17:51:26 534

转载 Rxjava2入门教程三:Operators操作符

Operators操作符操作符(Operators):其实质是函数式编程中的高阶函数,是对响应式编程的各个过程拆分封装后的产物。以便于我们操作数据流。按照其作用具体可分为以下几类:创建:创建一个可观察对象Observable并发射数据过滤:从Observable发射的数据中取出特定的值变换:对Observable发射的数据执行变换操作组合:组合多个Observable,例如:{1,2...

2019-03-03 17:50:28 190

转载 Rxjava2入门教程二:Observable与Observer响应式编程在Rxjava2中的典型实现

如需下载源码,请访问https://github.com/fengchuanfang/Rxjava2Tutorial在RxJava中,函数响应式编程具体表现为一个观察者(Observer)订阅一个可观察对象(Observable),通过创建可观察对象发射数据流,经过一系列操作符(Operators)加工处理和线程调度器(Scheduler)在不同线程间的转发,最后由观察者接受并做出响应的...

2019-03-03 17:49:31 214

转载 Rxjava2入门教程一:函数响应式编程及概述

如需下载源码,请访问https://github.com/fengchuanfang/Rxjava2TutorialRxJava是函数响应式编程思想在java语言上的具体实现。RxJava2在这一实现下,对Rxjava1进行了全面重写,如果之前没接触过RxJava,可以直接从Rxjava2入门,而不需要了解RxJava1。在使用RxJava2之前,对于Android开发,需要在项目中添加...

2019-03-03 17:48:10 384

转载 Android下拉刷新上拉加载控件,对所有View通用!

前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:PullToRefreshLayout,后来看到好多人还有上拉加载更多的需求,于是就在前面下拉刷新控件的基础上进行了改进,加了上拉加载的功能。不仅如此,我已经把它改成了对所有View都通用!可以随心所欲使用这两个功能~~我做了一个大集合的demo,实现了ListView、GridView、ExpandableListVie...

2019-02-17 09:50:06 1679

转载 RecyclerView系列之一ItemDecoration

一、添加分割线1.1 引入ItemDecoration在上一篇中,我们讲解了RecyclerView的基本使用方法,但有个问题:为什么Item之间没有分割线呢?其实,给RecyclerView添加分割线也非常简单,只需要添加上一句话:DividerItemDecoration  mDivider = new DividerItemDecoration(this,DividerItemDec...

2019-01-19 11:53:42 547

转载 RecyclerView系列之四回收复用实现方式二

在上篇中,我们先将摆好所有要显示的新增item以后,再使用offsetChildrenVertical(-travel)函数来移动屏幕中所有item。很明显,这种方法仅适用于每个item,在移动时,没有特殊效果的情况,当我们在移动item时,同时需要改变item的角度、透明度等情况时,单纯使用offsetChildrenVertical(-travel)来移是不行的。针对这种情况,我们就只有使用第...

2018-12-22 15:10:29 884

转载 RecyclerView系列之三实现回收复用

一、View的回收与复用1.1 RecyclerView是否会自动回收复用想必大家都听说RecyclerView是可以回收复用的,但它会自动复用吗?我们上面写的CustomLayoutManager会不会复用呢?1.1.1 如何判断是否复用首先,我们需要知道怎么判断RecyclerView是不是复用了View。我们知道在Adapter中有两个函数:@Overridepublic ...

2018-12-22 14:19:26 4730

转载 RecyclerView系列之二自定义LayoutManager

在这节中,我们先自己制作一个LinearLayoutManager,来看下如何自定义LayoutManager,下节中,我们会通过自定义LayoutManager来制作第一个滚轮翻页的效果。一、初始化展示界面1.1 自定义CustomLayoutManager先生成一个类CustomLayoutManager,派生自LayoutManager:public class CustomL...

2018-12-22 13:21:42 1990

转载 WebView使用详解(三)——WebChromeClient与LoadData补充

一、WebChromeClient1、概述(1)、 与WebViewClient的区别很多同学一看到这里有Chrome,立马就会想到google 的Chrome浏览器;这里并不是指Chrome浏览器的意思,而是泛指浏览器,WebView的内部实现并不是完全使用Chrome的内核,而是部分使用Chome内核,其它都是与Chrome不相同的; 我们再来对比下WebViewClient:We...

2018-12-08 13:45:46 411

转载 WebView使用详解(二)——WebViewClient与常用事件监听

一、WebViewClient1、概述前面我们虽然实现了交互,但可能我们会有一个很简单的需求,就是在开始加载网页的时候显示进度条,加载结束以后隐藏进度条,这要怎么做? 这些简单的需求,Android开发的老人们肯定都已经想到了,这些有关各种事件的回调都被封装在WebViewClient类中了,在WebViewClient中有各种的回调方法,就是在某个事件发生时供我们监听 使用方法如下:...

2018-12-08 12:11:41 445

转载 WebView使用详解(一)——Native与JS相互调用

一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家一、基本用法1、加载在线URLvoid loadUrl(String url)这个函数主要加载url所对应的网页地址,或者用于调用网页中的指定的JS方法,但有一点必须注意的是:loadUrl()必须在主线程中执行!!!否则就会报错!!!。注意:加载在线网页地址是会用到联网permission权限的,所以需...

2018-12-05 15:14:59 1608

转载 聊一聊Android的消息机制

1概述在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信。从技术实现上来说,消息机制还是比较简单的。从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有:1)消息发送者;2)消息队列;3)消息处理循环。示意图如下:图中表达的基本意思是,消息发送者通过某种方...

2018-09-06 22:52:55 404

转载 线程中的wait() 与 锁的关系

我们先看一段代码:/** * 计算输出其他线程锁计算的数据* */ public class ThreadA { public static void main(String[] args) throws InterruptedException{ ThreadB b = new ThreadB(); //启动计算线程 b.st...

2018-08-23 06:39:16 406

转载 安卓Handler当做内部类,导致内存泄露的问题

this handler should be static or leaks might occur How to Leak a Context: Handlers &amp; Inner ClassesContext是怎么泄露的:Handlers &amp; Inner ClassesConsider the following code:考虑下面的代码public...

2018-08-20 06:35:14 484

转载 安卓 OpenGL ES 2.0 完全入门(三):2D 纹理的裁剪、翻转、旋转、缩放

整体思路在基本概念和 hello world中我们提到着色器程序(Shader)的最终目的就是确定图形的顶点(Vertex)坐标和片元(Fragment)颜色。其实这正是 OpenGL 提供的最基本、最核心的操作原语,我们想要用 OpenGL 实现任何效果,无论是静止的光影、色彩、形状,还是运动的物理效果、粒子效果,归根结底都是要根据时间和位置确定顶点坐标和片元颜色。不过这个归根结底说得轻巧...

2018-08-18 07:55:54 4198

转载 安卓 OpenGL ES 2.0 完全入门(二):矩形、图片、读取显存等

1. 绘制矩形上篇中有提到,三角形是基本形状,利用三角形我们可以“拼出”其他的任何形状,例如矩形。绘制两个三角形时,我们可以指定 6 个顶点的坐标,但实际上只有 4 个不同的点,这样有点浪费,OpenGL 支持用另一种方式完成绘制:用一个数组保存顶点数据,用另一个数组保存顶点的绘制顺序:// ...private static final float[] VERTEX = { ...

2018-08-18 07:55:48 2939 1

转载 安卓 OpenGL ES 2.0 完全入门(一):基本概念和 hello world

1. 基本概念在 OpenGL 的世界里,我们只能画点、线、三角形,复杂的图形都是由三角形构成的。在 OpenGL 里有两个最基本的概念:Vertex 和 Fragment。一切图形都从 Vertix 开始,Vertix 序列围成了一个图形。那什么是 Fragment 呢?为此我们需要了解一下光栅化(Rasterization):光栅化是把点、线、三角形映射到屏幕上的像素点的过程(每个映射...

2018-08-18 07:55:42 1780

转载 View的滚动原理简单解析(二)

在《View的滚动原理简单解析》一文中对scrollBy和scrollTo做了简单的说明,通过该文可以对scrollTo/scollBy方法有了直观的理解。但是有个小问题就是scrollTo方法在滚动的过程中由于是瞬间的移动到目标坐标点,所以我们没法在滚动的过程中做任何控制,这个在体验上来说肯定不是那么的友好。那么如果我们想在滚动的过程中做某些滚动的特效,该怎么实现呢?这就是这篇博文的主角S...

2018-08-02 06:42:52 244

转载 View的滚动原理简单解析

一直对View的滚动了解的不深,说明白了吧也能说出个所以然来,所以我就花了点时间做了一个小小的总结,言归正传,view的滑动分为以下三种:1)View本身不滚动,指滚动View的内容,这也是View类提供的原始方法,通过scrollTo和ScrollBy方法来实现。2)使用动画,让View来产生滚动效果3)通过动态的修改LayoutParams的margin等属性让View来产生滚动...

2018-08-02 06:42:45 500

转载 Java类成员初始化顺序

首先看下这段测试代码public class ClassLoader { public static void main(String[] args) { // 3.第四步,new一个类,但在new之前要处理匿名代码块 new ClassLoader(); } // 1.第二步,静态...

2018-07-25 06:08:29 343

原创 EventBus3.0注意事项

1、父类中定义的订阅方法不能被重写比如你在父类中定义了一个订阅方法@Subscribe(threadMode = ThreadMode.MAIN)public void onEvent(Item item) {}那么不能在子类中重写该方法,否则一旦我们调用EventBus.getDefault().regist(this)后,EventBus就会查询当前类及其父类中的订阅方法,...

2018-06-30 06:28:07 329

转载 WebView 缓存机制和资源加载方案

1. Android WebView 存在什么性能问题?Android WebView 里 H5 页面加载速度慢 耗费流量下面会详细介绍。1.1 H5 页面加载速度慢H5 页面加载速度慢的原因下面会详细介绍:1.1.1 渲染速度慢前端H5页面渲染的速度取决于 两个方面:Js 解析效率Js 本身的解析过程复杂、解析速度不快 &amp; 前端页面涉及较多 JS 代码...

2018-05-23 18:52:04 4486

原创 Mac上安装Flutter过程详解

1、在 Android Studio 上安装了Flutter 插件,安装Flutter 插件时,会自动安装Dart 插件。 安装完插件后,重启Android Studio。2、根据Using Flutter in China上的说明,在命令行执行以下Shell命令,下载和安装 Flutter SDK:export PUB_HOSTED_URL=https:/...

2018-05-03 13:37:54 2492

转载 谷歌官方Android应用架构库——Room 持久化库

翻译自:https://developer.android.google.cn/training/data-storage/room/index.htmlRoom提供了一个SQLite之上的抽象层,使得在充分利用SQLite功能的前提下顺畅的访问数据库。对于需要处理大量结构化数据的App来说,把这些数据做本地持久化会带来很大的好处。常见的用例是缓存重要数据块。这样当设备无法连网的时候,用户...

2018-03-15 08:22:00 803

转载 Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库

布局文件main.xml的代码:&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_...

2018-03-06 08:10:12 495

安卓 OpenGL ES 2.0 完全入门(一):基本概念和 hello world.docx

安卓 OpenGL ES 2.0 完全入门(一):基本概念和 hello world

2019-08-25

01 Protocol Buffer技术详解(语言规范).doc

01 Protocol Buffer技术详解(语言规范).doc

2016-05-08

java设计模式

java设计模式

2016-05-08

OkHttp使用教程

OkHttp使用教程 OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。

2015-12-18

IDirectDraw7的使用

LPDIRECTDRAW7 lpDD; //DirectDraw对象 LPDIRECTDRAWSURFACE7 lpDDSPrimary ; //DirectDraw主表面 LPDIRECTDRAWSURFACE7 lpDDSBack ; //后台缓冲表面 DDSURFACEDESC2 ddsd ; //表面描述 DDSCAPS2 ddscaps ; 而且声明完表面描述后应立即用 ZeroMemory( &ddsd, sizeof( ddsd ) ); ZeroMemory( &ddscaps, sizeof( ddscaps ) ); 这两个语句使ddsd和ddscaps中的变量都为零,如果不这样做下面的CreateSurface会不成功。

2014-10-14

DirectDraw7编程基础

首先定义一个指向DirectDraw对象的指针,创建DirectDraw对象,查询以获取最新的DirectDraw接口,设置协作等级,设置显示模式。

2014-10-14

MTK短信编码.docx

目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来十分容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8-bit编码通常用于发送数据消息,UCS2编码用于发送Unicode字符。一般的PDU编码由A B C D E F G H I J K L M十三项组成。

2012-12-06

c语言设计(最全).ppt

C程序设计 上海工程技术大学 主讲:李旭芳 教材 C程序设计 (第二版) 谭浩强编著 清华大学出版社

2012-12-06

常用编码详解.docx

详细介绍各种常见编码的转换算法。通用字符集(UCS)、Unicode编码、UTF-8编码、UTF-7编码、GB2312编码、URL 解码

2012-12-06

刷机原理04 Android系统Recovery模式的工作原理.wps

Android系统Recovery模式的工作原理 在使用update.zip包升级时怎样从主系统(main system)重启进入Recovery模式,进入Recovery模式后怎样判断做何种操作,以及怎样获得主系统发送给Recovery服务的命令,这一系列问题的解决是通过整个软件平台的不同部分之间的密切通信配合来完成的。为此,我们必须要了解Recovery模式的工作原理,这样才能知道我们的update.zip包是怎样一步步进入Recovery中升级并最后到达主系统的。 一、Recovery模式中的三个部分 ................

2012-10-24

刷机原理03 Android系统的三种启动模式.wps

Android系统的三种启动模式 一、 系统更新update.zip包的两种方式 1. Android在升级系统时获得update.zip包的方式有两种。一种是离线升级,即手动拷贝升级包到SD卡(或NAND)中,通过settings--&gt;About phone--&gt;System Update--&gt;选择从SD卡升级。另一种是在线升级,即OTA Install(over the air)。用户通过在线下载升级包到本地,然后更新。这种方式下的update.zip包一般被下载到系统的/CACHE分区下。 2. 无论将升级包放在什么位置,在使用update.zip更新时都会重启并进入Recovery模式,然后启动recovery服务(/sbin/recovery)来安装我们的update.zip包。 ............

2012-10-24

刷机原理02 Android升级包update.zip的生成过程分析.wps

Android升级包update.zip的生成过程分析1) 对于update.zip包的制作有两种方式,即手动制作和命令生成。 第一种手动制作:即按照update.zip的目录结构手动创建我们需要的目录。然后将对应的文件拷贝到相应的目录下,比如我们向系统中新加一个应用程序。可以将新增的应用拷贝到我们新建的update/system/app/下(system目录是事先拷贝编译源码后生成的system目录),打包并签名后,拷贝到SD卡就可以使用了。 第二种制作方式:命令制作。Android源码系统中为我们提供了制作update.zip刷机包的命令,即make otapackage。该命令在编译源码完成后并在源码根目录下执行。 具体操作方式:在源码根目录下执行 ①$ . build/envsetup.sh。 ②$ lunch 然后选择你需要的配置(如17)。 ③$ make otapackage。 ....................

2012-10-24

刷机原理01 update.zip包目录结构

update.zip包目录结构 boot.img是更新boot分区所需要的文件。这个boot.img主要包括kernel+ramdisk。 system/目录的内容在升级后会放在系统的system分区。在Android源码编译后out/target/product/generic/system/。

2012-10-24

空空如也

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

TA关注的人

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