自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 Java 带你学习volatile关键字(线程原子性,可见性,有序性)

先不说这个关键字,先问你们一个问题,你们知道线程:可见性原子性有序性 的这三个特行吗?不理解,就继续看下文呗Java 每一个线程在进行工作时,都有一个自己独有的工作内存,这个工作内存是线程独自访问的,其他线程访问不了,每个线程进行读写数据时,都是先把主内存的数据copy一份数据副本到自己的工作内存,然后当这个线程需要读写修改这些数据时,会先在自己的...

2019-06-12 23:20:48 757 4

原创 Java 多线程使用以及锁机制

Java开启线程,用来执行异步功能,废话少说,直接上第一种方式:方式1:new Thread()new Thread(new Runnable() { @Override public void run() { String name = Thread.currentThread().getName(); ...

2019-05-29 16:55:58 1124 3

原创 Android studio 引入不了R包,手动引入显示红色。可以跑起来却没问题

问题是:工程里找不到自己包名的R,手动导入显示红色,Run起来倒是没问题。尝试过Clean,Rebuild,清缓存,重启,都没用。之前在这个问题踩坑2次,遂记录一下。指定一下:package即可。

2023-07-08 16:33:55 3715 2

原创 Android CameraX 使用教程

Android CameraX使用教程

2022-07-18 14:00:24 2790 3

原创 Kotlin之协程coroutine原理

协程原理,暂缺源码分析

2022-02-23 11:17:56 1524

原创 Android 触摸事件的分发

原理:伪代码override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { var isConsume = false if (onInterceptTouchEvent(ev)) { isConsume = onTouchEvent(ev) } else { isConsume = child.dispatchTouchEvent(ev) } return isC..

2022-02-22 15:49:05 1602 1

原创 Android RecycleView 吸顶功能 支持LinearLayoutManager,GridLayoutManager,StaggeredGridLayoutManager

RecycleView吸顶功能

2022-01-28 15:38:47 2998 5

原创 Git基本使用3:基本使用语法

==================【tag】===================打印所有tag:git tag删除tag:git tag -d version_1.0.3 //刪除本地taggit push upstream :refs/tags/version_1.0.3 //删除远程tagtag提交到远程:gitpushorigin--tagsgit push upstream --tagsgit push upstream :refs/tags.....

2021-12-20 18:25:04 291

原创 Android 获取APK的签名秘钥keystore

===========【获取release包签名秘钥】=========找到release签名在项目对应的目录1:进入签名目录:cd xxxxxxxxxxxxxxxx2:命令:keytool -list -v -keystore xxx.jks3:输入签名密码:xxxxenter===========【获取debug包签名秘钥】=========debug签名默认在这个目录cd 进去debug签名秘钥默认是:android1:cd 进去2:k...

2021-12-20 18:04:18 5103

原创 使用Android Studio 打 release 包

使用 Android Studio打包选 Build - Generate Signed Bundle / APK 选择打 aab 和 apk ,这里选 apk ,至于aab 和 apk包有什么却别,可以看 https://blog.csdn.net/qq_34707150/article/details/118670880初次打包,我们没有自己的签名,所需需要 Studio 帮我们生成自己的签名创建签名,一般把签名放在 ...

2021-09-27 16:40:03 8620 2

原创 Android 的 MVVM 之 LiveData源码研究

Android 官方提供的MVVM模式 ,有 DataBinding,ViewModel 和 LiveData组成。 废话少说,先看下LiveData怎么用的?class TestActivity : AppCompatActivity() { private var data: MutableLiveData<String> = MutableLiveData() override fun onCreate(savedInsta...

2021-09-23 18:07:29 554 2

原创 Kotlin之协程coroutine lifecycleScope 和 viewModelScope源码(2)

上一篇文章 Kotlin之协程coroutine使用(1) 文末介绍了Activity,Fragment 和 ViewModelScope对应的自动绑定生命周期协程开启方式, lifecycleScope 和 viewModelScope 这篇文章,就解剖一下,为什么这两货可以绑定生命周期,去需要用户自己去绑定取消?=========================================================================Activity 和 Fra..

2021-09-13 16:00:42 2647 3

原创 Android 进程通讯之AIDL

之前写过一篇进程通讯的文章Android 进程通讯之Messenger https://blog.csdn.net/Leo_Liang_jie/article/details/98751212

2021-06-16 19:49:52 784 7

原创 Kotlin 基础用法

====================【单例1】 ====================

2021-06-15 17:12:16 448 3

原创 Git基本使用2:GitLab密码更改

TortoiseGit是大家常用的git客户端,操作起来非常的简便,但是当账号密码变化之后,再使用TortoiseGit操作git就会提示没有权限,那么,TortoiseGit怎么修改用户名密码呢,首先,打开电脑上面的【控制面板】,依次:【用户账号】--【凭据管理器】-- 【Windows凭据】,并点击进入就会出现该git地址的具体信息,包括用户名和密码,点击下面的“编辑”按钮更新最新的用户名和密码即可...

2020-11-17 11:21:24 518 1

原创 Android Jetpack- Paging3.0的使用

上一篇文章说了 Paging2.0的基本使用https://blog.csdn.net/Leo_Liang_jie/article/details/109473099其实 Paging3.0早出来,而且功能会更加强大,比如下面:1:为 Kotlin 协程和流程提供一流更好的支持2:分页数据缓存到内存中,保证应用在处理页面数据的时候,更有效的使用系统资源等等原理这个2.0文章已经说过了,这边直接上代码,升级依赖到:3.0implementation "an...

2020-11-13 11:35:56 560 3

原创 Git基本使用1:初次提交代码到远程仓库

【1】 初始化本地代码,并提交到远程 创建一个仓库,可以在码云或github,这里以 github为例。仓库地址是:https://github.com/LeoLiang23/PagingDemo.git然后,在自己的工程目录,右键-Git Bash Here在Git命令窗口输入 git init,初始化本地仓库,初始化完成后,本地仓库文件夹中会出现一个.git文件夹,证明该仓库 已经被git管理了;然后,提交文件到缓存区,git a...

2020-11-04 16:20:41 540

原创 Android Jetpack- Paging2.0的使用

Google 推出 Jetpack 组件化已经有相当一段时间了。各种组件也层出不穷。今天就搞一下这个 Paging 。 Paging 的出现,就是用作列表的分页加载。其实现在已经有非常多成熟高效的开源列表加载控件了,比如:Smartrefreshlayout等。但Google推出的,必然有它的有点,当然也有它的局限性。 先说优点吧,Paging 的使用,需要配合ViewModle,LiveData等控件,数据的请求感知并绑定页面的生命周期,避免了内存泄漏。还需要绑定Dat...

2020-11-04 10:30:56 2777 8

原创 TCP的三次握手和四次挥手

TCP的原理,作为一个应用开发者来说,可能在平常开发中,99%时间用不上。因为平常用得网络框架比如OkHttp等都已经帮我们封装好,我们不需要知道里面的原理直接用接口即可,很简单。 但是作为一个优秀的开发者,我们必须要知其然也需要知其所以然。而且特别在面试的时候, TCP握手和挥手原理经常被问到,如果答得上来,容易加分.... 闲话少说,直接上原理图【三次握手】具体流程:1:客户端(Client)尝试请求连接,会随机产生一个数Sequence码 X,发给服...

2020-10-10 14:52:36 1794 2

原创 Android仿抖音App 列表滑动 PagerSnapHelper

抖音列表滑动,就是用了 PagerSnapHelper ,PagerSnapHelper 是Android 提供的一个Api,每滑动一个Item,其作用类似于ViewPage那样,直接与RecycleView相关连即可class RecycleActivity : AppCompatActivity() { companion object { fun launch(context: Context) { context.startActivit.

2020-09-23 15:48:06 2620 5

原创 Android Jetpack 之 App Startup

我们平常在项目开发中,会引入或多或少第三方sdk,引入时基本上都需要初始化,而大部分sdk初始化,都提倡在 Application的onCreate()里面初始化,比如下面:class MyApplication:Application() { override fun onCreate() { super.onCreate() MySdk().init(this) MySdk1().init(this) MySd...

2020-09-07 10:47:18 287

原创 Kotlin之协程coroutine使用(1)

Kotlin 已经成为Android开发的主打语言好些年了。但是我们在使用Kotlin时,不要仅限于使用Kotlin的语法糖。还有要使用其更有技术含量的API。比如这篇文章要讲的内容--协程在介绍协程之前,先说一下 Android 里面开启异步功能(开启新线程)的方法,要么开启一个新的Thread,要么创建一个线程池,要么创建HandlerThread,要么使用 IntentService。其实这几种方法,归根结底,都是开启了一个新的线程。新开一个线程,会消耗比较大的内存。频繁的开启线程的话还会导致内存

2020-04-14 17:40:59 4200 7

原创 Android 进程通讯之Messenger

Android 进程通讯有很好几种,比如:1> Bundle2> 文件共享3> AIDL4> Messenger5> ContentPrivider6> Socket现在只讲Messenger ,Messenger是基于AIDL的封装。让我们在不需要自己去编写AIDL 的情况下,使用进程通讯。================...

2019-09-27 13:50:46 274

原创 Android 内存泄漏检测之Profiler

说到Android的内存泄漏,很多人下意识想到:LeakCanary,导入依赖,运行后直接看通知栏结果。但是,你们有没有想过,LeakCanary 检查内存泄漏的范围?其实,LeakCanary 这家伙能且只能检测Activity的内存泄漏划重点:LeakCanary只能检测Activity的内存泄漏为什么呢?【LeakCanary的原理】因为LeakCanary...

2019-06-28 13:15:28 2897

原创 Android Gradle依赖分模块

Android 添加的依赖,一般都在 App Moudle目录下的build.gradle里面。比如:其实,这样也不是不可以。但是如果 app目录下的这个gradle承载的东西太多,就会很难看。那有没有,通过一个文件或一个模块,专门负责管理依赖的呢?答案是有的。我们专门建力一个Moudle来管理整个项目的依赖。【步骤1:新建Moudle】然后...

2019-06-24 20:14:26 438

原创 Android 隐式启动Activity之:action,category,data

Android 启动Activity 分为两种:显示启动 和 隐式启动显示启动:就是通过Intent 指明 那个包名+类名Activity,是开发中最常用的启动方式,在这就不说了,不是本文的目标隐示启动:现在说一下隐式启动。隐式启动也是通过Intent ,不过必须给Intent 加上匹配数据,匹配数据必须和目标Activity的其中一个过滤器配上,方可启动目标Activity。关于 匹配...

2019-06-20 14:45:27 3659

原创 Android 属性动画 原理 和 使用(Kotlin)

上面一篇文章写了 View动画 和 帧动画。。。。。那这篇文章,就来一波属性动画。。。。。我们应该都知道,View动画改变的只是View绘制的位置,并没有改变View的属性,比如四个顶点的坐标。就是你把一个View从他原始位置A,移动到新的位置B并停留在在B,你点击B位置,不是不会有点击事件的响应的。比如要点位置A才有。。。。所以如果一个动画是有位置移动,但又必须有点击事件的处理的话,......

2019-06-05 17:33:42 2970

原创 Android 动画之 View动画 和 帧动画

Android 动画可以分为三大类:1> View 动画 又称:补间2> 帧动画3> 属性动画==================【View 动画】=========================有5种:alpha渐变透明度动画效果scale...

2019-06-03 19:33:35 406 1

原创 Android 分析ScrollTo 和 ScrollBy

之前在面试一家大厂时问过我这个问题 :移动一个View,有几种办法,ScrollTo 和 ScrollBy区别是什么?我特么没说出后者来。。。。擦,,,,,,遂研究学习下。。。。首先,看下ScrollTo 的源码,它是一个 view层的方法翻译一下源码注释:设置你的View的滑动位置,这会调用 onScrollChanged()方法,然后你的View会被重新绘制x : 滑...

2019-05-31 16:56:28 476 1

原创 Android Handler全面解刨

==============【流程】==============【1】:Looper.prepare()会在本线程创建一个Loop实例,并在本线程创建并持有一个消息队列MessageQueue。一个线程对应只有一个消息队列。【2】:Looper.loop()不断循环在MessageQueue里面读取消息,如果没有消息则会阻塞,有消息则会通过target.dispathMessage()...

2019-05-23 15:30:12 125

原创 Java 虚拟机 垃圾回收机制,堆内存分代存储,类的加载与卸载

============================================== 1:内存模型==============================================线程共享区域:堆(heap)和 方法区(Method Area)线程私有:程序计数器,java虚拟机栈,本...

2019-05-21 13:07:57 354

原创 Android 线程池ThreadPoolExecutor 的使用和封装(kotlin)

// 传统开启线程方式Thread(Runnable { //to do异步请求}).start()1.使用new Thread()创建线程存在的问题 1> 如果在一个list每一个item都创建一个Thread,list量大的话会大量创建Thread,导致内存抖动,GC频繁的回收。要知道,GC的回收是在主线程的,这样会导致卡顿。2> 线程过...

2019-05-16 16:20:36 7120 5

原创 Android 带进度条的WebView(Kotlin)

自定义WebViewimport android.annotation.SuppressLintimport android.content.Contextimport android.support.constraint.ConstraintLayoutimport android.util.AttributeSetimport android.view.LayoutInfla...

2018-10-10 19:00:58 1002

空空如也

空空如也

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

TA关注的人

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