![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习心得
文章平均质量分 88
陈旭金-小金子
在职
展开
-
如何用 MVVM 的思想落实到项目中
前言MVVM 我相信大家也都听得多了. 但是我感觉还是有大部分人是理解不够到位的.下面呢, 我就用一个实际的例子来具体的讲述一下.要实现的功能一个标签列表一个添加标签的界面数据存储用了 Room 数据库普通思路// 相关接口LabelService { // 获取所有的标签 suspend getAllLabel(): List<LabelDTO>}// Room 数据库实现LabelDao { @Query("select * from label原创 2021-09-16 14:52:32 · 216 阅读 · 0 评论 -
Kotlin Inline 的原理和注意点
前言你的项目中, 是否写了很多的工具类? 比如 StringUtils, SPUtils, SystemUtils 等等那么此篇文章, 我来介绍一个关键词:inline, 我翻译为内联. 那么让我们来看一下内联函数的实现原理及其使用它的注意点普通扩展函数这里写了一个 SharePrefence 编辑的扩展函数fun SharedPreferences.edit( commit: Boolean = false, action: SharedPreferences.Editor.(.原创 2021-06-09 11:49:10 · 640 阅读 · 0 评论 -
你应该知道的协程中的挂起转化小技巧
前言相信很多小伙伴都在 Android 中使用了协程去处理各种异步的场景. 更有甚者 Flow 也能玩的如鱼得水. 这篇文章呢, 主要普及我们在使用协程的过程中, 如何转化其他代码为挂起函数, 让你的协程用起来更舒适.另外我们应该知道的是, 协程本质上是一个线程工具.suspendCoroutine & suspendCancellableCoroutine当我们开启了一个协程, 如果我们遇到了其他人写的代码或者某些 sdk 中的代码. 它是以 Callback 的形式提供了结果. 那么可.原创 2021-06-07 20:18:49 · 223 阅读 · 0 评论 -
你应该知道的 Flow 的 shareIn 和 stateIn 操作符
前言Flow 的 shareIn 和 stateIn 操作符可以转化一个 Cold Flow 到 Hot Flow:它可以把从上游 Cold Flow 中收到的数据广播给所有的订阅者(collectors/subscriber). 它通常用来提升性能, 甚至内部有缓存机制.知识点普及:Cold Flow 一被订阅或者被观察的时候, 就会产生数据. 通常订阅者可以观察到所有的数据. 而 Hot Flow 是不管有没有订阅者订阅, 它都保持活跃, 并且可能发射数据.在这个博客中, 你可以通过例子熟悉 s.原创 2021-06-04 17:49:30 · 3001 阅读 · 1 评论 -
Kotlin Flow 一种更安全的 UI 层收集流的方式
前言在我们的 Android App, Kotlin flows 通常用来收集 UI 层需要展示的那些数据. 但是你在收集数据的时候, 你得确保它不会做很多额外的事情、不会浪费资源、不会因为视图层退到后台或者销毁而引起内存泄漏.正因为 Kotlin flows 和 RxJava 都可能有上述的问题, 所以官方的 LiveData 是一个比较好的选择. 但是 LiveData 的局限性比较大, 它缺少了 flows 和 RxJava 的可组合性, 也缺少了很多的好用的链式操作符的支持.所以本文就是介绍如原创 2021-06-04 11:01:50 · 2044 阅读 · 3 评论 -
单 Activity 多 Fragment 架构如何使用路由进行统一跳转
前言有一些公司的项目, 采用的架构是单 Activity, 多 Fragment 的形式.核心就是依赖标记到静态方法上实现. Component 支持这种形式, 所以下面是以 Component 为例讲解的正文跳转一个 Activity, 多数框架都可以支持. 但是现在市面上所有的框架, 跳转 Fragment 只是一个名词, 只是通过服务发现获取到一个 Fragment 而已.比如下面的代码:Fragment fragment = Router.with("xxxFragment").putX原创 2020-09-17 21:43:15 · 983 阅读 · 0 评论 -
数据结构的一些基本概念
数据 数据是描述客观事物的符号,这种符号能被计算机识别和处理,是计算机中可以操作的对象数据元素 数据元素是组成数据的基本单位,也可以称之为记录.数据项 数据项是不可分割的最小单位,多个数据项可以组成一个数据元素数据对象 数据对象是数据的一个子集,是性质相同的数据元素的集合因为平时处理的数据都有一定的相同的性质,所以数据对象和数据的概念容易混淆,所以数据对象也简称为数据数据结构原创 2017-09-01 17:27:44 · 643 阅读 · 0 评论 -
自定义仿QQ主界面选项卡
自定义QQ主界面选项卡QQ Android版本的效果先贴上来可以看到这个可爱的选项卡,其实使用xml布局可以很容易的弄出来,但是博主就带大家封装成一个自定义控件!博主实现的效果这速度。。。抱歉哈,博主也不知道为啥这么快。。。。可以看到,支持的还是挺丰富的,还支持包裹,根据自定义属性tabWidht来计算宽度 其实实现起来很简单,下面博主就带小白们来实现一下,大牛请忽略分析问题实现上述的效果,如果我原创 2017-03-07 22:37:49 · 2463 阅读 · 0 评论 -
自定义控件之-横线指示器
前言 其实指示器的自定义控件太多了,但是需求时刻在变,总有不满足的时候,所以就得自己来绘制 因为博主遇到了横线形式的指示器,所以特地分享一下,同时也教一下不会自定义的童鞋效果图可以看到可以和ViewPager一起联动,下面就写出实现的过程首先我们需要弄明白几个点 1. 绘制每一个指示器通过canvas的绘制圆角矩形就行 2. 每一个指示器Item都需要一个Rect对象来描述绘制的位置原创 2017-04-06 21:55:00 · 2763 阅读 · 0 评论 -
自定义控件之-流式布局FlowLayout
前言 其实对于流式布局控件,很多人并不陌生,项目中或多或少都会用到的.但是有多少人会写一个流式布局的控件这就不知道了,所以博主这里对流式布局进行一个讲解,并且封装一个比较完善的控件效果图看到的这个整个就是一个流式布局,里面是很多个TextView,博主使用了一个圆角的背景为了显示的好看一点,当然了,流式布局控件并不关心里面的控件是什么控件,任何控件在流式布局内部都是可以显示的效果图上了,接下来原创 2017-04-29 13:44:32 · 2118 阅读 · 3 评论 -
ListView复用和优化详解
前言我们每一个Android开发人员对ListView的使用肯定是很熟悉的,然而多少人能真正的懂ListView的缓存机制呢,说白了就是ListView为了提高效率而内部实现的一种优化,而这种优化就需要复用ItemView(也就是item对应的View).那么下面楼主来对ListView和RecyclerView的item复用问题做一个深入的讲解原创 2016-11-09 17:09:34 · 17867 阅读 · 16 评论 -
retrofit2 使用完全解析(1)
前言上一篇文章博主介绍了okhttp这个同步的网络请求框架的使用,也说了okhttp的优点,但是同时也指出了okhttp在使用方面的不便,所以本文介绍基于okhttp的网络框架retrofit的使用,还是同一个公司的产品.1.支持异步请求2.用户自己定义请求接口,由框架自动通过代理实现,这就相当于把网络请求的部分代码抽取出来,代码更加简洁3.利用注解描述请求的参数,极大的方便了用户原创 2016-06-10 17:31:28 · 5054 阅读 · 10 评论 -
AsyncTask原理详解
内部有一个成员变量,获取了设备的cpu的个数private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();1.内部核心线程个数为:CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));2.最大线程数量为:MAXIMUM_POOL_SIZE =原创 2016-11-24 19:42:26 · 577 阅读 · 0 评论 -
Android中服务的开启和停止的方式以及各种情况下的存活状态
服务是我们在Android开发中很常见的一个组件,号称那个啥?四大组建之一对吧,嘿嘿,没记错哈。今天小金子要说的不只是开启单一的开启服务和停止服务方法的使用,还要混合使用这几个方法,并且记录下来! 1.如果开启服务? 第一种:startService 第二种:bindService 2.如果停止服务?原创 2015-11-16 19:41:15 · 14243 阅读 · 5 评论 -
ListView复用和优化之多布局详解
前言在上一篇文章中,我已经非常详细的阐述了ListView的复用原理和几个大家不太明白的地方.也同时重现了复用的问题并告诉大家如何去解决.如果你没有看上一篇,请先移步,这篇基于上一篇的知识继续讲解ListView中多布局是个什么原理ListView复用和优化详解需求:实现联系人列表的展现形式先随便放一个联系人列表的效果图,博主随便找了一张图给大家看看效果先我们可以看到,这里肯定是一个列表来实现的,如原创 2016-11-11 11:36:25 · 5131 阅读 · 6 评论 -
自定义控件之下拉刷新控件
前言 我们都知道,自带的下拉刷新控件SwipeRefreshLayout非常好用,而且在很多app中都使用了,但是有些时候公司的设计觉得这样子不好看,他需要像QQ一样的下拉刷新的效果,这时候你就会去找各种支持下拉刷新的列表控件,什么pullToRefresh啦这些控件实现的效果确实挺好的,但是注意了,这里你就非得使用它改造过的列表控件啦,有时候你需要再弄点其他效果你可能就需要修改别人的实现.这就原创 2016-11-22 23:01:11 · 1743 阅读 · 8 评论 -
git学习笔记
ps:以下笔记均在windows下测试的,其他平台博主没有测试,请注意一.简单的命令1.添加文件到暂存区git add 比如: git add 1.txt 2.txt表示添加两个文件到暂存区,支持通配符2.查看状态git status 可以查看没有添加到仓库的文件,被更改的文件,被删除的文件,被重命名的文件.......是一个很重要的命令3.删除文件原创 2016-04-22 20:31:51 · 578 阅读 · 0 评论 -
okhttp 使用完全解析
前言一直以来,我们都在寻找更好用的网络框架,很多大牛们也一直致力于网络框架的设计.只为了一个目标:简单易学,但是功能却强大,性能也不错.okhttp正是这样子的一个框架,越来越多的人使用它作为网络请求的框架,它的出现也将近一年了,那么现在就让我们来学习学习吧简介okhttp框架并不是一个异步的请求框架,异步的工作需要自己做环境要求支持Android 2.3及其以原创 2016-06-09 17:48:29 · 8515 阅读 · 0 评论 -
Android NDk开发系列(疑难杂症篇)
前言在NDk开发中,开发者会遇到各种各样的问题,而博主也不是什么大神,只能说解决一个问题就往这篇博客上怼,我相信积少成多的道理,也相信随着博主的学习,这篇博文也会随着变长,同时也可以解决很多小白会遇到的问题1 开发环境如果我们要学习NDK开发,那么配置环境必不可少,而且环境配置出现了一点问题可能就会导致你不能够接下去正常的学习,那么就让博主带你们来配置一下NDK开发的环境1.1 N原创 2016-09-28 22:52:31 · 623 阅读 · 0 评论 -
自定义控件之-RelativeSizeTextView
前言 首先对于这个控件博主真的不知道取一个什么样的中文名字来解释,所以标题只能把控件的名字直接拎上来了,控件主要实现的功能就是显示一个可以配置大小和颜色的前置文本和后置文本,可能说的不太理解,没事,先看看效果图从效果图上可以看到中间是一个正常文本,两边可以显示不同大小和颜色的文本,这有什么用呢?不知道大家有没有见过这样子的效果这个效果自己使用SpannableString然后配合Relativ原创 2017-04-23 09:02:46 · 2594 阅读 · 0 评论 -
Android 开发中的注意点
前言 我们平常在开发Android的时候,经常会遇见命名感觉代码是对的,但是效果确实不尽人意的时刻.其实很多时候都是自己的代码或者其他地方没有注意到引起的.所以博主把博主开发的时候遇到的坑全都记录下来,方便自己查阅也做一个分享.会不断的更新资源文件方面selector选择器为什么不生效?如果你写的是点击反馈的选择器,那么做到下面两点就肯定生效了 1.状态是an原创 2017-07-12 18:33:22 · 331 阅读 · 0 评论 -
Retrofit 源码分析流程
前言 Retrofit 框架使用了有一年多了,但是说来惭愧,一直都是处于使用的状态,不会用的地方利用百度或者谷歌搜索一下.一直没有去摸索里面的源代码.这几天我对源代码进行阅读之后,不仅理顺了Retrofit 框架的实现,而且对泛型的认识提升到了一个新的高度.因为里面很多代码是对泛型进行处理的.下面就容许我给大家梳理一下Retrofit 的工作原理源码分析首先我定义一个接口文件public in原创 2017-07-30 18:03:13 · 971 阅读 · 0 评论 -
一篇文章弄懂 RxJava
前言RxJava 是 ReactiveX 在 Java 上的一个实现.官网为:http://reactivex.io/笔者是一个做 Android 的开发者,RxJava 从入门到现在的水平已经过了两年的时间.其实这东西入门真的挺难的.很多人看了几篇介绍的博客就觉得自己会了.其实并不是这样的.因为很多人看了之后依然不明白内在的很多东西,比如:线程切换切换订阅线程信号分发线程操...原创 2019-07-23 09:05:23 · 1495 阅读 · 3 评论 -
Mac有哪些软件可以显著提高生产力?
前言个人使用 Mac 三年了,在这三年中滚打摸爬,有好几个大神教我如何提高生产力,现在我觉得我是时候分享一下啦,让刚接触 Mac 的人可以使用到一些很好的软件首先,Mac 系统本身对于开发是非常友好的,个人本身结合了 Linux 和 Windows 的优势,对于开发人员真的是非常的友好,这句话真的是肺腑之言效率提升包管理器 HomeBrewhttps://brew.sh/这个我就不多...原创 2019-04-26 22:22:26 · 1467 阅读 · 1 评论 -
RxJava2 进阶之Observable 的种类及其对应的场景
目录前言Observable 的种类真实代码中如何辨别使用哪种 **Observable**前言这篇文章主要讲述一件事情,如何正确的定义我们程序中的 Observable,下文中所有说到的信号,和我们常说的 RxJava发射的元素、Item、Error、Complete是同一类东西,但是我习惯叫它信号,在ObjectC中的Rac中也称之为信号Observable 的种类在 RxJava2...原创 2019-04-13 17:30:49 · 1156 阅读 · 0 评论 -
mysq 配置远程登录
使用授权的方式:mysql -u root –pmysql>use mysql;mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;转载 2018-09-29 18:31:24 · 196 阅读 · 0 评论 -
Android 全面适配
前言 我们都知道哈,Android适配这块一直在困恼着我们.而之前的适配方案也很多 1.比如鸿洋的适配方案: 采用在Activity 创建转换xml的时候把系统的Layout换成自定义的,或者直接在xml中写自定义的&gt;Layout.然后在onMeasure方法中直接遍历整颗树来调整 视图的大小 上面的这个方案还有一种就是写成一个工具类,在Activity setC...原创 2018-06-16 09:00:38 · 737 阅读 · 0 评论 -
HTTPS 认识的总结
前言 首先特别感谢各位分享内容的博主,这里对我学习到的做一个总结HTTPS 是什么其实 HTTPS 就是 HTTP + SSL/TLS 的单词的缩写 SSL 是什么这里不做阐述,贴出一个某度的标准解释: 点我了解SSL(Secure Sockets Layer) 点我了解TLS(Transport Layer Security)HTTPS 用白话文的形式来阐述就是在...原创 2018-02-15 18:01:30 · 295 阅读 · 0 评论 -
面向对象的六大原则
前言 看书的一个笔录单一职责原则开闭原则依赖倒置原则里氏替换原则接口隔离原则迪米特原则单一职责原则 这个比较简单,就是表示一个类应该明确自身的职责,通常是对于一些负责的功能进行拆分成多个类相互协同工作,让他们满足单一职责原则,切勿全部功能耦合在一个类中开闭原则原则 这个也比较简单,简单的说就是对修改关闭,对扩展开放. 因为一个设计好的类,...原创 2018-02-15 19:23:23 · 200 阅读 · 0 评论 -
如何更优雅的实现标题栏
前言 做Android这么久了,目前见过实现标题栏的方式无非两种1.在每一个Activity的xml中include一个共有的标题栏xml,然后在Activity的生命周期方法onCreate方法中完成标题栏的初始化 2.在每一个Activity的xml中使用自己写的标题栏控件 第二种方式明显比第一种方式好一些,因为这种方式你能在布局文件中通过自定义属性就可以完成整个标题栏的初始化,而不原创 2017-11-10 16:23:55 · 741 阅读 · 0 评论 -
c语言Socket相关函数简介
网络字节顺序 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释,网络字节顺序采用big-endian排序方式inet_aton inet_aton是一个计算机函数,功能是将一个字符串IP地址转换为一个32位的网络序列IP地址。如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零。使用这原创 2017-10-10 09:21:30 · 1784 阅读 · 0 评论 -
面试总结
前言以下是本人面试过程中被问到的一些问题,这里做一个记录基础普及区Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念 你是如何理解MVC的M 就是数据源.所有的数据来源都可以视原创 2016-11-21 11:55:13 · 999 阅读 · 0 评论 -
Android Handler消息处理机制详解
前言从我们学习android开始,几乎每天都在和handler打交道.有了它,我们在子线程中处理好了耗时的操作,可以利用它来更新UI.它为我们在线程间的通信提供了很大的方便,而今天博客就来详细的介绍一下Handler的消息循环机制,一步一步的了解其中的奥妙,本文不介绍Handler的详细使用,探究的是内部的原理.所以看这篇博客的童鞋需要有handler的基本使用能力先抛出一个简单的原创 2016-05-11 10:48:24 · 12888 阅读 · 6 评论 -
Groovy学习之环境搭建
1.下载安装包或者压缩包下载地址:http://groovy-lang.org/download.html如果在Window下建议选择最后一个Windows installer傻瓜式安装或者使用博主的下载地址:安装就是一路的下一步,这里不做演示了2.配置环境变量配置环境变量,这个和Java的配置一模一样3.实验安装的真确性然后打开我们的cmd窗口,敲原创 2016-10-13 22:36:44 · 3341 阅读 · 0 评论 -
Android WebView内容宽度自适应
我们平常在项目中有可能会遇到网页的内容是通过json数据传递到app上面用WebView来显示的,这时候我们通常都要调整内容的总宽度不超过父容器的宽度,这样子用户可以不用左右滑动就可以看到全部的内容.但是当我遇到这个问题的时候,我是想方设法想达到这个目的,用过WebView里面的很多方法,包括:1.第一种网上的方法(ps:失败)WebSettings settings = we原创 2016-04-05 11:53:37 · 16028 阅读 · 17 评论 -
VideoView播放视频的时候出现播放前透明问题
楼主遇到这个问题纠结了很久了,后来换了一个主题就解决了,哎,也不知道是什么问题.但是好歹解决了<activity android:name=".common.videoFullScreenPlay.VideoFullScreenPlayAct" android:theme="@style/Theme.AppCompat" />原创 2016-09-15 17:12:55 · 4898 阅读 · 5 评论 -
vmware不能识别USB
1.2.3.搞定,其实根本原因就是User3.0和User2.0的冲突问题原创 2015-12-22 15:56:06 · 519 阅读 · 0 评论 -
解决SpringMvc中org.springframework.web.servlet.DispatcherServlet noHandlerFound的错误
我们在web中配置启动springMvc是通过配置servlet来启动的,而配置的时候就会用到匹配规则,我们是用/*还是使用/这两个是不一样的:1、拦截"/",可以实现现在很流行的REST风格。很多互联网类型的应用很喜欢这种风格的URL。为了实现REST风格,拦截了所有的请求。同时对*.js,*.jpg等静态文件的访问也就被拦截了。2、拦截/*,这是一个错误的方式,请求可以走到stu原创 2016-01-05 20:12:25 · 14512 阅读 · 0 评论 -
Android中使用DrawerLayout的注意点
先看一个简单的效果:可以看到这个控件是一个抽屉式的侧滑菜单,使用的方式也极其简单!这是在v4支持包里面的,他会默认让第一个孩子作为主界面,第二个孩子变成菜单相信大家都是看得懂的,这样子就可以实现了刚才展示的效果.当然了DrawerLayout里面的菜单和主界面里面的布局还是要自己布局的。但是注意这里的一个很容易忘记的属性.我们点到我们的菜单的布局里面!原创 2016-01-01 17:44:22 · 3315 阅读 · 0 评论 -
Mysql中判断一个字段是不是为null注意点
今天查询数据的时候,要查询某一个字段为null的情况,第一反应就是select * from xxx where xx = NULL;这是不对的,数据是查不出来的,正确的应该是:select * from xxxwhere ISNULL(xx);这里做一下记录,错了好几次了,不长记性!!!!原创 2015-12-15 12:37:33 · 6185 阅读 · 0 评论