![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 96
Android
谭嘉俊
多少次迎着冷眼与嘲笑,从没有放弃过心中的理想。
展开
-
音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)
音视频开发之旅——本文主要讲解的是音频基础概念、交叉编译原理和实践(LAME的交叉编译),是基于Android平台。原创 2024-03-05 03:18:02 · 1171 阅读 · 0 评论 -
一个可以方便调试响应数据的控件(Android版本)
该控件可以方便调试响应数据,如下图所示:控件的样式参考以下这个网站:JSON在线解析解析及格式化验证项目GitHub:JSONRecyclerView概述控件是以RecyclerView为基础,文本会呈现相应的颜色以反映对应的类型,如果值的类型为JSONObject或者JSONArray,该数据对应的视图可以展开或者收缩,除此之外,文本的大小或者颜色都可以自定义更改。文本分为以下七种类型:普通文本:冒号、花括号、中括号、逗号、Object{…}和Array[]。key类型的文本Stri原创 2021-05-31 00:16:00 · 252 阅读 · 0 评论 -
深入了解Android的View工作原理
本文章讲解的内容是深入了解Android的View工作原理,建议对着示例项目阅读文章,示例项目链接如下:ViewDemo本文章分析的相关的源码基于Android SDK 29(Android 10.0,即Android Q)。Android的窗口结构先从Activity的startActivity系列方法开始说起,我选了一个常用的**startActivitiy(Intent intent)**方法,源码如下所示:// Activity.java@Overridepublic void sta原创 2020-10-09 03:32:02 · 226 阅读 · 0 评论 -
深入了解Android消息机制和源码分析(Java层和Native层)
本文章讲解的内容是深入了解Android消息机制和源码分析(Java层和Native层),建议对着示例项目阅读文章,示例项目链接如下:HandlerDemo本文章分析的相关的源码基于Android SDK 29(Android 10.0,即Android Q)。概述Android消息机制涉及到以下四个类:Message:消息,它分为硬件产生的消息(例如:触摸、点击)和软件产生的消息。MessageQueue:消息队列,它的作用是向消息池投递消息和从消息池中取出消息。Looper:用于为线程运原创 2020-09-25 04:11:43 · 653 阅读 · 0 评论 -
Java集合框架——Android中的HashMap源码分析
本文章讲解的内容是Android中的HashMap源码分析。本文章分析的HashMap源码是基于Android SDK(版本为28)。要注意的是,Android SDK 28和JDK 1.8对HashMap的底层实现进行了优化,例如:引入了红黑树的数据结构和扩容的优化等。概述HashMap的UML类图如下所示:HashMap是基于哈希表实现的Map接口。此实现提供了所有可选的映射操作,并且允许空键和空值,要注意的是,最多允许一条记录的键是空,允许多条记录的值是空。它不保证映射的顺序随着时间保持不原创 2020-08-13 03:22:53 · 196 阅读 · 0 评论 -
Android Studio自定义模板——一键生成框架模板代码
本文章讲解的内容是Android Studio自定义模板——一键生成框架模板代码。框架GitHub地址:Dagger2版本:Dagger2Koin版本:Koin为了快速使用Android通用框架开发项目,我配置了一套属于它的模板,可以一键生成框架模板代码。模板GitHub地址:AndroidGenericFrameworkTemplate使用方法将模板下载回来,目录如下图所示:TanJiaJunActivityForDagger2:用于生成Dagger2版本的Activity对应的xml原创 2020-07-26 02:43:53 · 1621 阅读 · 0 评论 -
Java集合框架——Android中的ArrayList源码分析
本文章讲解的内容是ArrayList的源码分析。本文章分析的ArrayList源码是基于Android SDK(版本为28)。概述ArrayList是一个大小可以调整的动态数组,它可以允许所有元素(包括null),它提供了增加、删除、修改、查找方法。ArrayList的数据结构是数组,它会占据一块连续的内存空间,容量是数组的长度(length),增加、删除、查找的时间复杂度是O(n),根据索引访问元素的时间复杂度是O(1)。ArrayList是线程不安全的,未实现同步,如果多个线程同时访问Arra原创 2020-07-13 03:57:45 · 296 阅读 · 0 评论 -
Android的内存管理
本文章讲解的内容是Android的内存管理。概览Android Runtime(ART)虚拟机和Dalvik虚拟机都使用分页(Paging)和内存映射(Memory-mapped file)来管理内存。这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在RAM中,并且无法换出。要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。这种情况有一个例外:对于任何未被修改的内存映射文件(例如:代码),如果系统想要在其他位置使用其内存,可将其从RAM中原创 2020-07-07 03:41:34 · 717 阅读 · 0 评论 -
Kotlin系列——在Android中使用协程以及协程源码分析
本篇文章讲解的内容是在Android中使用协程。在说协程之前,我先说下线程和线程池:线程是操作系统的内核资源,是CPU调度的最小单位,所有的应用程序都运行在线程上,它是我们实现并发和异步的基础。在Java的API中,Thread是实现线程的基础类,每创建一个Thread对象,操作系统内核就会启动一个线程,在Thread的源码中,它的内部实现是大量的JNI调用,因为线程的实现必须由操作系统提供直接支持,在Linux操作系统中,每一个Java thread对应一个native thread,它们是一一对应的原创 2020-06-18 03:59:50 · 789 阅读 · 0 评论 -
MVC、MVP、MVVM以及使用MVVM搭建GitHub客户端
本篇文章讲解的内容是MVC、MVP、MVVM以及使用MVVM搭建GitHub客户端,以下是框架的GitHub地址:Dagger2版本:Dagger2Koin版本:Koin在讲解之前,我想先聊一下MVC、MVP和MVVM相关的概念。MVCMVC(Model-View-Controller)的概念最早源自于Erich Gamma、Richard Helm、Raplph Johnson、John Vlissides这四位大牛在讨论设计模式中的观察者模式时的想法;Trygve Reenskaug在1979原创 2020-05-29 03:07:04 · 560 阅读 · 0 评论 -
Kotlin系列——泛型型变
本文章讲解的内容是泛型的型变,我写一个扩展Boolean的示例代码来应用我要奖的内容,示例代码如下:BooleanExtensionDemo先看下以下例子,代码如下:List<String> strings = new ArrayList<String>();// Java中禁止这样的操作List<Object> objects = strings;...原创 2020-01-31 02:02:55 · 3275 阅读 · 0 评论 -
Kotlin系列——封装MMKV及其相关Kotlin特性
这篇文章主要是对MMKV进行封装,由此了解一些Kotlin特性,建议对着示例代码阅读文章,示例代码如下:MMKVDemoMMKV简单介绍其实在MMKV的Wiki中已经有很详细的介绍了,地址如下:MMKV for Android官方WikiMMKV是基于mmap内存映射的key-value组件,底层序列化/反序列化使用protobuf实现,性能高,稳定性强,而且Android这边还支持多进...原创 2020-01-28 17:31:44 · 1651 阅读 · 0 评论 -
Android Jetpack系列——LiveData源码分析
本文章已授权微信公众号郭霖(guolin_blog)转载。本文章主要是对LiveData进行源码分析,建议对着示例代码阅读文章,示例代码如下:LiveDataDemo本文章使用的是Android SDK 29的源码分析。定义LiveData是一种可观察的数据存储器类,它具有生命周期感知能力,遵循应用组件(例如:Activity、Fragment、Service(可以使用Lifecycle...原创 2020-01-28 17:29:11 · 490 阅读 · 0 评论 -
Android Jetpack系列——ViewModel源码分析
本文章已授权微信公众号郭霖(guolin_blog)转载。本文章主要是对ViewModel进行源码分析,建议对着示例代码阅读文章,示例代码如下:ViewModelDemo本文章使用的是Android SDK 29的源码分析。定义Android框架管理UI控制器的生命周期(例如:Activity和Fragment),Framework可能决定销毁或者重新创建一个UI控制器,以响应某些用户操...原创 2020-01-28 17:25:14 · 446 阅读 · 0 评论 -
RxJava2源码分析——FlatMap和ConcatMap及其相关并发编程分析
本文章主要是对RxJava2的FlatMap和ConcatMap这两个操作符进行源码分析,并且对其相关并发编程进行分析,在阅读之前,可以先阅读以下文章:RxJava2源码分析——订阅RxJava2源码分析——线程切换RxJava2源码分析——Map操作符本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjav...原创 2020-01-28 17:10:36 · 617 阅读 · 0 评论 -
RxJava2源码分析——Map操作符
本文章主要是对RxJava2的Map操作符进行源码分析,在阅读之前,可以先阅读以下文章:RxJava2源码分析——订阅RxJava2源码分析——线程切换本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandr...原创 2020-01-28 17:03:14 · 187 阅读 · 0 评论 -
RxJava2源码分析——线程切换
本文章主要是对RxJava2的线程切换流程进行源码分析,在阅读之前,可以先阅读以下文章:RxJava2源码分析——订阅本文章用的RxJava和RxAndroid版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'我们先写段示...原创 2020-01-28 17:02:12 · 209 阅读 · 0 评论 -
RxJava2源码分析——订阅
本文章主要是对RxJava2的订阅流程进行源码分析,先说下我用的RxJava和RxAndroid版本,版本如下:implementation 'io.reactivex.rxjava2:rxjava:2.2.6'implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'我们先写段示例代码,为了方便理解,我就不用上Lambda和链式调用了,代码...原创 2020-01-28 16:58:55 · 140 阅读 · 0 评论 -
Kotlin系列——带弧形的进度条
本文章已授权微信公众号郭霖(guolin_blog)转载。这是一个带弧形的进度条,其实这个控件很久之前已经实现了,但是我想用Kotlin去重写优化一遍,并且对此铺开来讲解。项目GitHub:CircularArcProgressView效果图属性NameFormatDescriptioncapv_background_colorcolor背景颜色capv...原创 2020-01-28 16:55:18 · 344 阅读 · 0 评论 -
Kotlin系列——DSL
本文章已授权微信公众号郭霖(guolin_blog)转载。什么是DSL?DSL是domin specific language的缩写,中文名叫做领域特定语言,指的是专注于某个应用程序领域的计算机语言,比如显示网页的HTML、用于数据库处理的SQL、用于检索或者替换文本的正则表达式,它们都是DSL。与DSL相对的就是GPL,GPL是General Purpose Language的简称,即通用编...原创 2020-01-28 16:49:10 · 3279 阅读 · 1 评论 -
Android通用框架(Kotlin-MVVM)
项目技术要点:1. 使用Kotlin编写(协程、DSL)。2. 使用MVVM架构。3. 使用Android Jetpack组件:DataBinding、LiveData、ViewModel、LifeCycle、Navigation。4. 使用OkHttp、Retrofit做网络请求。5. 使用Glide加载图片。6. 使用ViewPager2。7. 使用Snackbar...原创 2020-01-28 16:45:33 · 2488 阅读 · 0 评论