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

原创 Java 带你学习volatile关键字(线程原子性,可见性,有序性)
先不说这个关键字,先问你们一个问题,你们知道线程:可见性原子性有序性 的这三个特行吗?不理解,就继续看下文呗Java 每一个线程在进行工作时,都有一个自己独有的工作内存,这个工作内存是线程独自访问的,其他线程访问不了,每个线程进行读写数据时,都是先把主内存的数据copy一份数据副本到自己的工作内存,然后当这个线程需要读写修改这些数据时,会先在自己的...
2019-06-12 23:20:48
826
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
1247
3
原创 Android studio 引入不了R包,手动引入显示红色。可以跑起来却没问题
问题是:工程里找不到自己包名的R,手动导入显示红色,Run起来倒是没问题。尝试过Clean,Rebuild,清缓存,重启,都没用。之前在这个问题踩坑2次,遂记录一下。指定一下:package即可。
2023-07-08 16:33:55
4286
2
原创 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
1686
1
原创 Android RecycleView 吸顶功能 支持LinearLayoutManager,GridLayoutManager,StaggeredGridLayoutManager
RecycleView吸顶功能
2022-01-28 15:38:47
3276
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
413
原创 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
5559
原创 使用Android Studio 打 release 包
使用 Android Studio打包选 Build - Generate Signed Bundle / APK 选择打 aab 和 apk ,这里选 apk ,至于aab 和 apk包有什么却别,可以看 https://blog.youkuaiyun.com/qq_34707150/article/details/118670880初次打包,我们没有自己的签名,所需需要 Studio 帮我们生成自己的签名创建签名,一般把签名放在 ...
2021-09-27 16:40:03
10362
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
617
2
原创 Kotlin之协程coroutine lifecycleScope 和 viewModelScope源码(2)
上一篇文章 Kotlin之协程coroutine使用(1) 文末介绍了Activity,Fragment 和 ViewModelScope对应的自动绑定生命周期协程开启方式, lifecycleScope 和 viewModelScope 这篇文章,就解剖一下,为什么这两货可以绑定生命周期,去需要用户自己去绑定取消?=========================================================================Activity 和 Fra..
2021-09-13 16:00:42
3070
3
原创 Android 进程通讯之AIDL
之前写过一篇进程通讯的文章Android 进程通讯之Messenger https://blog.youkuaiyun.com/Leo_Liang_jie/article/details/98751212
2021-06-16 19:49:52
915
7
原创 Git基本使用2:GitLab密码更改
TortoiseGit是大家常用的git客户端,操作起来非常的简便,但是当账号密码变化之后,再使用TortoiseGit操作git就会提示没有权限,那么,TortoiseGit怎么修改用户名密码呢,首先,打开电脑上面的【控制面板】,依次:【用户账号】--【凭据管理器】-- 【Windows凭据】,并点击进入就会出现该git地址的具体信息,包括用户名和密码,点击下面的“编辑”按钮更新最新的用户名和密码即可...
2020-11-17 11:21:24
685
1
原创 Android Jetpack- Paging3.0的使用
上一篇文章说了 Paging2.0的基本使用https://blog.youkuaiyun.com/Leo_Liang_jie/article/details/109473099其实 Paging3.0早出来,而且功能会更加强大,比如下面:1:为 Kotlin 协程和流程提供一流更好的支持2:分页数据缓存到内存中,保证应用在处理页面数据的时候,更有效的使用系统资源等等原理这个2.0文章已经说过了,这边直接上代码,升级依赖到:3.0implementation "an...
2020-11-13 11:35:56
642
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
616
原创 Android Jetpack- Paging2.0的使用
Google 推出 Jetpack 组件化已经有相当一段时间了。各种组件也层出不穷。今天就搞一下这个 Paging 。 Paging 的出现,就是用作列表的分页加载。其实现在已经有非常多成熟高效的开源列表加载控件了,比如:Smartrefreshlayout等。但Google推出的,必然有它的有点,当然也有它的局限性。 先说优点吧,Paging 的使用,需要配合ViewModle,LiveData等控件,数据的请求感知并绑定页面的生命周期,避免了内存泄漏。还需要绑定Dat...
2020-11-04 10:30:56
2930
8
原创 TCP的三次握手和四次挥手
TCP的原理,作为一个应用开发者来说,可能在平常开发中,99%时间用不上。因为平常用得网络框架比如OkHttp等都已经帮我们封装好,我们不需要知道里面的原理直接用接口即可,很简单。 但是作为一个优秀的开发者,我们必须要知其然也需要知其所以然。而且特别在面试的时候, TCP握手和挥手原理经常被问到,如果答得上来,容易加分.... 闲话少说,直接上原理图【三次握手】具体流程:1:客户端(Client)尝试请求连接,会随机产生一个数Sequence码 X,发给服...
2020-10-10 14:52:36
1895
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
2728
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
336
原创 Kotlin之协程coroutine使用(1)
Kotlin 已经成为Android开发的主打语言好些年了。但是我们在使用Kotlin时,不要仅限于使用Kotlin的语法糖。还有要使用其更有技术含量的API。比如这篇文章要讲的内容--协程在介绍协程之前,先说一下 Android 里面开启异步功能(开启新线程)的方法,要么开启一个新的Thread,要么创建一个线程池,要么创建HandlerThread,要么使用 IntentService。其实这几种方法,归根结底,都是开启了一个新的线程。新开一个线程,会消耗比较大的内存。频繁的开启线程的话还会导致内存
2020-04-14 17:40:59
4456
7
原创 Android 进程通讯之Messenger
Android 进程通讯有很好几种,比如:1> Bundle2> 文件共享3> AIDL4> Messenger5> ContentPrivider6> Socket现在只讲Messenger ,Messenger是基于AIDL的封装。让我们在不需要自己去编写AIDL 的情况下,使用进程通讯。================...
2019-09-27 13:50:46
334
原创 Android 内存泄漏检测之Profiler
说到Android的内存泄漏,很多人下意识想到:LeakCanary,导入依赖,运行后直接看通知栏结果。但是,你们有没有想过,LeakCanary 检查内存泄漏的范围?其实,LeakCanary 这家伙能且只能检测Activity的内存泄漏划重点:LeakCanary只能检测Activity的内存泄漏为什么呢?【LeakCanary的原理】因为LeakCanary...
2019-06-28 13:15:28
3100
原创 Android Gradle依赖分模块
Android 添加的依赖,一般都在 App Moudle目录下的build.gradle里面。比如:其实,这样也不是不可以。但是如果 app目录下的这个gradle承载的东西太多,就会很难看。那有没有,通过一个文件或一个模块,专门负责管理依赖的呢?答案是有的。我们专门建力一个Moudle来管理整个项目的依赖。【步骤1:新建Moudle】然后...
2019-06-24 20:14:26
474
原创 Android 隐式启动Activity之:action,category,data
Android 启动Activity 分为两种:显示启动 和 隐式启动显示启动:就是通过Intent 指明 那个包名+类名Activity,是开发中最常用的启动方式,在这就不说了,不是本文的目标隐示启动:现在说一下隐式启动。隐式启动也是通过Intent ,不过必须给Intent 加上匹配数据,匹配数据必须和目标Activity的其中一个过滤器配上,方可启动目标Activity。关于 匹配...
2019-06-20 14:45:27
4372
原创 Android 属性动画 原理 和 使用(Kotlin)
上面一篇文章写了 View动画 和 帧动画。。。。。那这篇文章,就来一波属性动画。。。。。我们应该都知道,View动画改变的只是View绘制的位置,并没有改变View的属性,比如四个顶点的坐标。就是你把一个View从他原始位置A,移动到新的位置B并停留在在B,你点击B位置,不是不会有点击事件的响应的。比如要点位置A才有。。。。所以如果一个动画是有位置移动,但又必须有点击事件的处理的话,......
2019-06-05 17:33:42
3356
原创 Android 动画之 View动画 和 帧动画
Android 动画可以分为三大类:1> View 动画 又称:补间2> 帧动画3> 属性动画==================【View 动画】=========================有5种:alpha渐变透明度动画效果scale...
2019-06-03 19:33:35
492
1
原创 Android 分析ScrollTo 和 ScrollBy
之前在面试一家大厂时问过我这个问题 :移动一个View,有几种办法,ScrollTo 和 ScrollBy区别是什么?我特么没说出后者来。。。。擦,,,,,,遂研究学习下。。。。首先,看下ScrollTo 的源码,它是一个 view层的方法翻译一下源码注释:设置你的View的滑动位置,这会调用 onScrollChanged()方法,然后你的View会被重新绘制x : 滑...
2019-05-31 16:56:28
559
1
原创 Android Handler全面解刨
==============【流程】==============【1】:Looper.prepare()会在本线程创建一个Loop实例,并在本线程创建并持有一个消息队列MessageQueue。一个线程对应只有一个消息队列。【2】:Looper.loop()不断循环在MessageQueue里面读取消息,如果没有消息则会阻塞,有消息则会通过target.dispathMessage()...
2019-05-23 15:30:12
154
原创 Java 虚拟机 垃圾回收机制,堆内存分代存储,类的加载与卸载
============================================== 1:内存模型==============================================线程共享区域:堆(heap)和 方法区(Method Area)线程私有:程序计数器,java虚拟机栈,本...
2019-05-21 13:07:57
411
原创 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
7588
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
1107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人