
Android基础、进阶、核心技术
文章平均质量分 52
RxJava、AOP、Binder、AIDL、NDK、插件化、组件化、热修复、屏幕适配、四大组件、Handler/Message、触摸事件、动画、View视图、MD、Image图像
FishAnd_Yu
他说要 仗剑走天涯
展开
-
Android: Binder: 彻底顿悟Android Binder
Android: Binder: 彻底顿悟Android Binder原创 2022-12-30 16:14:58 · 1463 阅读 · 0 评论 -
四大组件:Fragment: Fragment 你所不知道的细节
Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数_Tibib的专栏-优快云博客_fragment setarguments为什么要用Fragment.setArguments(Bundle bundle)来传递参数https://blog.youkuaiyun.com/tu_bingbing/article/details/24143249Fragment运行机制源码分析(一)_Android学习之旅-优快云博客_android fra原创 2021-12-29 08:54:23 · 756 阅读 · 0 评论 -
四大组件:Fragment:Fragment 生命周期监控
Lifecycle是 Google 在Jetpack中提出的,在包android.arch.lifecycle下面,如果使用的是 suppor 包中的 SupportActivity 或者 FragmentActivity 已经继承了 Lifecycle。使用的方法如下:1:通过为 activity 添加一个空白的 fragment 也是一种方法,然后 fragment 就可以获取到 activity 的生命周期了,Glide 就是通过添加一个 fragment 来管理生命周期的。2:Fragmen原创 2022-01-21 09:51:03 · 2134 阅读 · 0 评论 -
View系列: Material Design 系列: TextInputLayout 使用详解
https://blog.youkuaiyun.com/jaynm/article/details/106918713https://blog.youkuaiyun.com/jaynm/article/details/106918713前言TextInputLayout 主要是作为 EditText 的容器,从而为 EditText 生成一个浮动的 Label,当用户点击 EditText 的时候,EditText 中的 hint 字符串会自动移到 EditText 的左上角。TextInputLayout 的简单使用,是原创 2022-01-21 13:39:23 · 1002 阅读 · 0 评论 -
View系列:Material Design系列:沉浸模式,状态颜色栏变化,状态栏和导航栏
Android 4.4 UI体验之ImmersiveMode沉浸模式,状态颜色栏变化,状态栏和导航栏_ShareUs的专栏-优快云博客Toolbar+AppCompatActivity打造沉浸式体验;AppCompatActivity中嵌入ViewPager+Fragment. Android 3.0之后,Google引入了ActionBar,想统一安卓应用的导航栏样式。但由于ActionBar难以定制,很大程度上限制了开发人员,比如标题文字大小、间距等不易实现个性化,很多开发者放弃了A..原创 2022-01-24 14:56:44 · 857 阅读 · 0 评论 -
View系列:material Design:Android App底部导航栏的四种实现(单Activity+多Fragment,多Activity+多Fragment)
Android App底部导航栏的四种实现(单Activity+多Fragment,多Activity+多Fragment)_ShareUs的专栏-优快云博客(推荐)适合单Activity+多Fragment或者多模块Activity+多Fragment的架构-https://github.com/YoKeyword/Fragmentation> 底部导航栏的效果:1.使用LinearLayout+ TextView实现2.使用RadioGroup +RadioButton实现...原创 2022-01-24 15:01:27 · 992 阅读 · 0 评论 -
View系列:Material Design:Android Material Design控件解析
Android Material Design 控件使用1:CoordinatorLayout + AppBarLayout :通过使用此控件实现:toolBar(ActionBar) + tab + Viewpager 来搭建主页。 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app...原创 2022-01-19 10:00:07 · 342 阅读 · 0 评论 -
View系列:Material Design: CardView 开发详解
前言:1:Android 5.0 版本中新增了 CardView,CardView 继承自 FrameLayout 类,具有圆角背景和阴影的 FrameLayout,并且可以设置圆角和阴影,使得控件具有立体性,也可以包含其他的布局容器和控件。2:CardView 引入了三维坐标轴 z 轴,可以设置阴影和圆角效果,让你的布局像一张卡片,让 UI 界面看起来具有立体感3:默认情况,CardView 是不可点击的,并且没有任何的触摸反馈效果。触摸反馈动画在用户点击 CardView 时可以给用户以视觉原创 2022-01-21 14:53:14 · 1026 阅读 · 0 评论 -
View系列:Material Design: ActionBar 使用详解
Android MD (Material Design)设计1:Android ActionBar 使用系统风格 1: ActionBar是google给用户提供了一种全局统一的界面风格和操作方式 2:如何修改系统的ActionBar风格,并定义成自己的 ActionBar风格,首先我们知道ActionBar可以添加自定义的布局样式(setCustomView),那么突破口就在这里了,我们可以通过自定义布局样式,在这个布局文件里面添加我们需要在ActionBar上面显示的标...原创 2022-01-19 09:39:57 · 955 阅读 · 0 评论 -
进程间通讯:Binder:AIDL
AIDL是Android Interface Description Languaged 简写。用于描写客户端/服务端通信接口的一种描述语言。其实说人话就是通过定义aidl接口来生成第二章中的代理类。即AIDL的原理其实跟上一章的代理模式优化Binder的使用是一样的。目的就是为了省去我们自己编写代理的代码。1.定义AIDL接口package com.zhpan.sample.binder.aidl;// Declare any non-default types here with impo原创 2021-11-29 19:55:13 · 532 阅读 · 0 评论 -
进程内通讯:Handler:Handler使用不当带来内存泄露
1:什么是Handler使用不当 ?表象就是 Handler 采用匿名内部类或者内部类扩展,这两种情况默认持有外部类 Activity引用1.1 Activity 退出的时候 Handler 仍可达,分两种情况1:Activity退出时仍有 Thread 在处理,Thrad 引用着 Handler2: Activity退出的时候 虽然 Thread结束了,但 Message 还在 队列中排队处理或者正在处理,造成间接持有 Handler代码如下:// 匿名内部类overri..原创 2022-03-23 10:31:16 · 1974 阅读 · 0 评论 -
进程间通讯:AIDL: Android Doc 之 Aidl
android IPC: AIDL thread is not blocked.AIDL线程是不被阻塞的Using AIDL is necessary only if you allow clients from different applications to access your service for IPC and want to handle multithreading in your service.使用AIDL是必要的(你允许来自不同应用程序的客户端访问你的服务的通过IPC机原创 2022-01-25 10:54:36 · 2216 阅读 · 0 评论 -
进程间通讯:Binder: Binder(进程之间通信)--之服务的编写
3: 服务端编写前面几篇内容时介绍的 Aidl生成 Binder对象后,数据传输以及客户端代码逻辑,下面介绍下服务的编写逻辑// package: android.intent.action.server.aidl.gradeservicepublic class Gradeserviceextends Service { private IGradeservice.Stub mBinder = new IGradeservice.stub() { @overrid原创 2022-01-03 16:12:06 · 1280 阅读 · 0 评论 -
进程内通讯:Handler:图解Handler MessageQueue Message Looper
MessageQueue 插入Message到链表原创 2021-11-19 15:01:34 · 339 阅读 · 0 评论 -
进程内通讯:线程:Android线程管理(二):ThreadLocal
ThreadLocal并非是一个线程的本地实现版本,首先它并不是一个Thread,而是 threadLocalvariable(线程局部变量),简单的理解就是:为每一个使用该变量的线程提供变量值的副本,是JAVA中一种特殊的线程绑定机制。1:从线程的角度来看:每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal实例时可访问的,那么在线程消失之后,其线程局部实例的所有副本都会被垃圾回收器回收2:通过ThreadLocal存取数据,总是与当前线程相关,也就是说,原创 2021-12-07 16:21:59 · 414 阅读 · 0 评论 -
进程间通讯:Binder:bindService之 onServiceConnected回调
很明显 通过Google官方文档描述,我们知道1:bindService()的返回值只是表明服务是否存在;2:真正能代表是否成功绑定服务的是触发onServiceConnected()回调。文档还有这么一句话所谓异步操作,即我们执行完bindService(),并不会马上回调onServiceConnected(),当然也不会等待它;而是按照程序的顺序继续执行。这时由于服务还未成功获取到,我们调用服务中的方法就会出错。2:解决b...原创 2022-03-22 14:41:34 · 4078 阅读 · 0 评论 -
进程间通讯:Binder: 优化Binder代理模式
1.定义一个查询成绩接口public interface IGradeInterface { int getStudentGrade(String name);}2.被代理的Binder类自定义GradeBinder继承Binder,并实现IGradeInterface接口public class GradeBinder extends Binder implements IGradeInterface { @Override public int getS原创 2021-11-29 19:51:22 · 661 阅读 · 0 评论 -
进程间通讯:Binder:支持类型,同步/异步的AIDL
1:AIDL支持的数据类型1、基本数据类型2、String和CharSequence3、ArrayList(里面的每个元素必须支持aidl)4、HashMap(里面的每个元素必须支持aidl,包括key和value)5、Parcelable值得注意的是除了基本类型,其他类型参数需要加上流向:in(只能客户端流向服务端),out(只能服务端流向客户端),inout(可以在客户端和服务端双向流动)2: 同步/异步2.1:bindService是异步的 ,详见我的另一篇博客Binder原创 2022-03-22 15:32:52 · 2980 阅读 · 0 评论 -
进程间通讯:Binder:bindService和startService以及onServiceConnected回调流程
进程间通讯:Binder:bindService和startService以及onServiceConnected回调流程原创 2020-07-18 19:25:08 · 843 阅读 · 0 评论 -
进程间通讯:Binder:Activity与Service通讯
进程间通讯:Binder:Activity与Service通讯原创 2022-06-15 16:29:36 · 1365 阅读 · 0 评论 -
进程间通讯:Binder: Binder原理剖析
这是一种比startService更复杂的启动方式,同时使用这种方式启动的service也能完成更多的事情, 比如其他组件可向其发送请求,接受来自它的响应,甚至通过它来进行IPC等等。我们通常将绑定它的组件称为客户端,而称它为服务端。 如果要创建一个支持绑定的service,我们必须要重写它的onBind()方法。这个方法会返回一个IBinder对象,它是客户端用来和服务器进行交互的接口。 而要得到IBinder接口,我们通常有三种方式:继承Binder类,使用Messeng...原创 2021-11-24 10:58:02 · 772 阅读 · 0 评论 -
图像系列:Bitmap: Bitmap内存优化
有了上图额理论支撑,Bitmap优化图片内存,到底优化什么 ?原创 2021-12-24 13:27:38 · 1072 阅读 · 0 评论 -
图像系列:Bitmap : OpenCV For Android
OpenCV For Android 从零开始搭建开发环境 实现图像处理_没有鱼了的博客-优快云博客原创 2022-03-17 15:04:01 · 3858 阅读 · 0 评论 -
图像系列:Bitmap:从网络上下载一张图片
1 :Bitmap 编码,以及占用的内存大小2:从网络上下载一个图片,一般流程,以及图片编码,比如从字节数组----》字符串----》字符串到字节数组3:图片的存储以及在页面传递常用的手段4:图片额缓存...原创 2020-08-10 10:43:17 · 823 阅读 · 0 评论 -
图像系列:Bitmap: Android开发-自己动手写Bitmap高效加载
Android开发-自己动手写Bitmap高效加载 跟OOM说再见_没有鱼了的博客-优快云博客原创 2022-03-17 15:06:33 · 752 阅读 · 0 评论 -
图像系列: Bitmap:Android源码解析之Bitmap占用内存计算
Android源码解析之Bitmap占用内存正确的计算公式 你知道吗_没有鱼了的博客-优快云博客_bitmap占用内存计算原创 2022-03-17 15:11:01 · 723 阅读 · 0 评论 -
图像系列:Bitmap:硬核 Android 中 Bitmap压缩的几种方法
决定Bitmap图片大小或者解码之后内存取决于:图片透明度,位深,图片采样率(分辨率),编码格式,图片本身宽高,下面我们围绕这几个因素来研究下1:质量压缩法(改变图片位深和透明度)1.1 :理论说明所谓质量压缩法:不减少图片本身的像素,它在保持像素的前提下该变图片的位深以及透明度,来达到压缩图片的目的,压缩后的文件大小会有所改变,但是导入成 bitmap后所占内存是不会变化的,由于要保持像素不变,所以它无法无限压缩,达到一个极限值后就不会继续变小了。所以这个方法,不适合缩略图,也不适合想通过原创 2022-03-22 11:21:18 · 6518 阅读 · 1 评论 -
网络请求框架:Okhttp: Interceptor剖析
网络请求框架:Okhttp: Interceptor剖析原创 2022-10-11 12:16:56 · 273 阅读 · 0 评论 -
网络请求框架: Okhttp: 同步异步请求剖析
OKHttp3--流程分析 核心类介绍 同步异步请求源码分析【二】_没有鱼了的博客-优快云博客原创 2022-03-18 14:38:03 · 278 阅读 · 0 评论 -
网络请求框架:Okhttp:Dispatcher分发器实现同步异步请求源码解析【三】
OKHttp3--Dispatcher分发器实现同步异步请求源码解析【三】_没有鱼了的博客-优快云博客_okhttp3.dispatcher原创 2022-03-21 10:01:20 · 2270 阅读 · 0 评论 -
网络请求框架:OkHttp:框架解析
> 网络框架 OkHttpInterceptor 是OkHttp最核心的一个东西,不要误以为它只负责拦截请求进行一些额外的处理(例如 cookie),实际上它把实际的网络请求、缓存、透明压缩等功能都统一了起来,每一个功能都只是一个 Interceptor,它们再连接成一个 Interceptor.Chain,环环相扣,最终圆满完成一次网络请求。责任链拦截器Interceptor:RetryAndFollowUpInterceptor:负责失败重试以及重定向;BridgeIntercepto...原创 2022-01-24 16:55:05 · 1028 阅读 · 0 评论 -
网络请求框架:Okhttp:RealInterceptorChain拦截器源码解析【三】
OKHttp3--拦截器链RealInterceptorChain源码解析【五】_没有鱼了的博客-优快云博客原创 2022-03-21 13:32:17 · 1475 阅读 · 0 评论 -
网络请求框架:Okhttp:Call对象实现请求源码解析【四】
OKHttp3--调用对象RealCall源码解析【四】_没有鱼了的博客-优快云博客一:概述,当我们封装好 Request后需要执行这个请求,但是 OkHttp并不是直接执行 Request ,而是将 Request又封装了一层 Call对象,一个Call对象代表一个已经准备好的请求(Request), Call可以取消,同时一个 Call对象代表了一个 请求/响应 (request/response)流 。二:Call只是一个请求接口,具体的实现是RealCall ,不管是同步请求还是异步请求.原创 2022-03-21 12:00:03 · 934 阅读 · 0 评论 -
动画专题:属性动画:插值器TimeInterpolator和估值器TypeEvaluator
带有活力的属性动画源码分析与实战——Android高级UI - 掘金原创 2022-04-03 13:11:15 · 1970 阅读 · 0 评论 -
动画专题:属性动画:插值器AccelerateDecelerateInterpolator 加速插值器
Android插值器运用,绘制小球的运动轨迹原创 2022-04-12 14:48:55 · 2128 阅读 · 0 评论 -
RxJava从入门到精通:RxJava源码初步分析
Rxjava主线流程源码分析 :ObservableCreate1:Observable是被观察者,Observer是观察者,subsrcibe是让被观察者和观察者之间建立订阅关系。 2:事件的发射自 上游到下游,事件的消费订阅:自下游到上游。 3: 创建一个 ObservableCreate对象继承 Observable, 后面的发射事件,消费事件都是在这个对象中展开原创 2021-12-08 13:07:24 · 1564 阅读 · 0 评论 -
Rxjava从入门到精通:Rxjava操作符ObservableTime 定时器使用
Rxjava: 定时器使用 ObservableTime原创 2022-04-22 17:48:46 · 1165 阅读 · 0 评论 -
Rxjava从入门到精通:手写Rxjava框架(二):代码示例
Rxjava从入门到精通:手写Rxjava框架(二):代码示例原创 2022-04-24 21:09:22 · 211 阅读 · 0 评论 -
RxJava: 从入门到精通之:RxJava通识、框架介绍
RxJava: 从入门到精通之:RxJava通识、框架介绍、思维导图原创 2022-04-19 14:09:59 · 558 阅读 · 0 评论 -
Rxjava从入门到精通:Rxjava转换操作符之 Map使用示例
Rxjava转换操作符之 Map使用示例原创 2022-04-22 17:46:03 · 1451 阅读 · 0 评论