- 博客(369)
- 资源 (6)
- 问答 (2)
- 收藏
- 关注

原创 Android重要知识点学习总结
Java多线程、线程池、异步任务HashMap、HashTable、ConcurrentHashMap四大引用反射接口、抽象类的区别垃圾回收机制JVM内存模型设计模式基本原则单例策略工厂、建造者适配器观察者AndroidActivity启动模式App的启动流程Handler原理事件分发机制Activity、Window、View的关系View的绘制流程断点续传类加载过程(插件化和热修复)kotlin + jetpack + mvvm进程间通信进程
2021-01-31 19:07:40
1037
1

原创 Android OpenGL ES基本用法,目录
Android OpenGL ES基本用法(1),环境的搭建Android OpenGL ES基本用法(2),绘制三角图形Android OpenGL ES基本用法(3),绘制四边形Android OpenGL ES基本用法(4),绘制纹理图片...
2019-09-19 14:57:16
1481
原创 后端SSL证书更新流程
申请成功后,点击下载,下载Tomcat版。在服务端代码中配置后,打包发布。阿里云先购买20个免费额度。创建免费证书,提交证书申请。
2023-04-12 10:27:37
32
1
原创 Android几种数据存储的对比(MMKV、DataStore、SharedPreference)
Jetpack DataStore 是一种改进的新数据存储解决方案,允许使用协议缓冲区存储键值对或类型化对象。DataStore 以异步、一致的事务方式存储数据,克服了 SharedPreferences(以下统称为SP)的一些缺点。DataStore基于Kotlin协程和Flow实现,并且可以对SP数据进行迁移,旨在取代SP。MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。
2022-11-16 11:36:55
1274
原创 Android 热修复Tinker框架
首先通过assmeble打包(通过run打包作为bakApk时,差异包可能编译出错)修改代码后,打包补丁包。(注意需要在app.gradle中配置基准包信息)
2022-10-28 16:13:43
287
原创 PyTorch开发环境搭建,Anaconda+PyTorch+PyCharm
Anaconda(用作包管理工具)官网https://www.anaconda.com/历史版本https://repo.anaconda.com/archive/创建一个环境激活环境PyTorchPyTorch是一个开源的Python机器学习库官网https://pytorch.org/测试PyTorch是否安装成功PyCharm(社区版)官网https://www.jetbrains.com/pycharm/...
2022-05-08 19:10:16
477
原创 Can‘t use Subversion command line client: svn Probably the path to Subversion executable is wrong
Android Studio配置svn问题如果安装的TortoiseSVN工具,本身是不带有command-line功能的,必须要安装Apache-Subversion,而且须要单独安装。下载Apache-Subversionhttps://www.visualsvn.com/files/Apache-Subversion-1.9.2.zip下载后可以看到Android Studio中配置该地址即可...
2022-05-05 16:02:43
257
原创 Android Mediacodec解码视频(通过Surface播放、得到Image数据)
MediaCodec解码得到Image对于仅仅需要将视频切分为一帧一帧并保存为图片的用户来说,使用这种方法比bigflake的方法会快10倍左右,因为没有OpenGL渲染,以及转换为Bitmap的开销。而对于需要获得视频帧YUV格式数据的用户来说,这种方法能够直接得到YUV格式数据,中间没有数学运算,不会出现不必要的精度损失,而且,也是效率最高的。package com.vision.opengl.decoder;import android.graphics.Bitmap;import an
2022-04-28 16:44:59
3544
原创 MySQL-8.0.28安装搭建过程
MySQL下载官网官网下载地址下载并解压到C:\Users\1\mysql-8.0.28-winx64添加环境变量我的电脑->属性->高级->环境变量,在path下新建C:\Users\1\mysql-8.0.28-winx64\bin测试是否安装成功
2022-04-02 20:18:18
1167
原创 Android CoordinatorLayout嵌套RecyclerView再嵌套RecyclerView后导致联动失效问题
问题CoordinatorLayout 嵌套 RecyclerView 滑动联动没问题,但是在 RecylerView 中再嵌套一层 RecyclerView 就会出现不联动的问题。解决给最内层的 RecyclerView 设置属性:nestedScrollingEnabled = false,使其不参与联动 <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_item"
2022-03-06 00:54:34
2800
原创 FFmpeg movie和amovie的使用
moviemovie可以用于加载一个输入源,同-i命令区别movie是一个filter可以写在filter_complex中,这样的好处是可以随时用随时输入,不需要去记输入源的id,缺点在于很多Main options参数用不了,例如itsoffset延时播放-i是Main options,输入和处理分离,通过[id:v]来取输入源,缺点在于当输入源过多时,需要标记每个输入源的id用法moviemovie=in.avi:seek_point=3.2, scale=180:-1, s
2022-02-08 09:44:27
1672
原创 Android内存泄漏检测工具LeakCanary
LeakCanaryhttps://github.com/square/leakcanary引入dependencies { //https://github.com/square/leakcanary debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'}2.0以上的leakcanary自带ContentProvider初始化在ContentProvider中进行初始化interna
2022-01-06 10:00:39
1714
原创 Android 设置drawableTop无效的问题
无效代码 //设置顶部图标 val drawable = resources.getDrawable(align.resId) setCompoundDrawables(null, drawable, null, null)有效代码AppCompatResources.getDrawable获取资源图片需要设置setBounds val drawable = AppCo
2021-11-14 09:10:53
1769
原创 Java合并两个有序数组、合并两个有序链表
合并有序链表牛客网:CC85 合并两个排序的链表 public ListNode mergeList(ListNode list1, ListNode list2) { ListNode newHead = new ListNode(0); ListNode curNode = newHead; while (list1 != null && list2 != null) { if (list1.val &
2021-11-05 09:53:23
99
原创 Java判断链表中是否有环(快慢指针)
LeetCodehttps://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9?tpId=46&&tqId=29039&rp=1&ru=/ta/classic-code&qru=/ta/classic-code/question-ranking算法 public boolean hasCycle(ListNode head) { if (head == null) r
2021-09-28 14:56:34
124
原创 Android MVVM+RecyclerView+SwipeRefreshLayout实现下拉刷新和上滑加载更多
引入 //ViewModel的创建 implementation 'androidx.activity:activity-ktx:1.1.0'//by viewModels implementation 'androidx.fragment:fragment-ktx:1.2.5'//by viewModels // implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"//下拉刷新.
2021-08-31 15:29:56
520
1
原创 Android 监听软键盘SoftKeyboard的高度变化
方案一,使用blankj:utilcodehttps://github.com/Blankj/AndroidUtilCode/blob/master/lib/utilcode/README-CN.md KeyboardUtil.observeKeyboard(requireActivity()) { val param = binding.flKeyboard.layoutParams param.height = it .
2021-06-26 17:02:58
481
原创 Android ViewModel和LiveData源码分析
获取动态数据时使用例如:获取首页的列表,首次加载和加载更多时,数据是变化的,此时使用livedata中存储每次请求的结果,在activity中统一进行观测即可。如果是第一页,则setData否则addData。在列表刷新和加载更多时,只需要一行调用ViewModel.refreshData或ViewModel.loadMoreData方法即可,不需做其他逻辑操作,都交给ViewModel处理优势:简洁逻辑清晰。对同一类型的数据集中处理。非动态数据时可以不用livedata例如获取优.
2021-05-26 11:25:08
165
6
原创 【设计模式】观察者模式(Observer)
观察者模式观察者模式的定义:指多个对象间存在一对多的依赖关系,当一个对象发生改变时,所有依赖他的对象都会得到通知并自动更新。这种模式又被称为发布—订阅模式、模型—视图模式,它是对象行为型模式。观察者模式的优点:降低目标与观察者之间的耦合关系,两者是抽象耦合关系。自定义观察者模式Java中自带的Observable和Observer参考资料观察者模式(Observer模式)详解...
2021-05-20 12:46:53
137
原创 Android Gson的使用和源码分析总结
GsonJSON(JavaScript Object Notation)是一种轻量级的数据交换格式Gson是Google推出的用于在Java对象和JSON数据之间进行映射的Java类库,可以将一个JSON字符串转化为Java对象(反序列化),或者将Java对象转换为JSON字符串(序列化)https://github.com/google/gsonGson使用导入//https://github.com/google/gsonimplementation 'com.google.cod
2021-05-19 12:24:07
174
原创 Android 软件盘相关的问题(在BottomSheetDialogFragment中无法隐藏问题、使用AirPanel适配软键盘高度问题)
需求在BottomSheetDialogFragment关闭的时候收起软键盘 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { setStyle(STYLE_NO_TITLE, R.style.BottomDialogSheet) return object : BottomSheetDialog(requireContext(),theme) { overri
2021-05-14 16:24:06
551
1
原创 Android Retrofit源码分析
Retrofit用法Retrofit注解请求方法类序号名称说明1GETget请求2POSTpost请求3PUTput请求4DELETEdelete请求5PATCHpatch请求,该请求是对put请求的补充,用于更新局部资源6HEADhead请求7OPTIONSoption请求8HTTP通用注解,可以替换以上所有的注解,其拥有method、path、hasBody三个属性参数类| 分类 | 名称
2021-05-11 17:36:59
129
原创 Android ThreadLocal相关源码和在Looper中的使用
java 线程的工作内存和ThreadLocalJava 并发 - ThreadLocal详解
2021-05-07 13:36:08
90
原创 Android开发中的==、equals、hashcode的区别和联系
定义==gradlew clean assembleVestRelease参考资料Java 中的 ==, equals 与 hashCode 的区别与联系
2021-04-22 19:24:15
364
原创 【设计模式】代理模式总结(静态代理、动态代理)
代理模式代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。静态代理这种代理方式需要代理对象和目标对象实现一样的接口。特点冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。静态代理在编译时就已经实现,编译完成后代理类是一个实际的class文件接口public interface IUserDao { public void save();}实现类
2021-04-19 18:14:16
110
原创 Android SparseArray和ArrayMap相关总结
SparseArray是什么?SparseArray稀疏数组,可以用来存储基本类型数据,避免数据的装箱拆箱,某些情况下性能更好。几个同类SparseArray存储Object类型,put(int key, E value)SparseIntArray存储int基本类型,put(int key, int value)SparseLongArray存储long基本类型,put(int key, long value)参考资料Android官方文档...
2021-04-17 19:52:09
199
原创 Android 使用Glide自定义BitmapTransformation实现加载图片顶部对齐(FitTop)
原图和效果图MainActivity Glide.with(this) .load(R.mipmap.ic_image) .transform(FitTopTransformation()) .into(ivImg)自定义BitmapTransformation从原图的顶部开始裁剪,从(0,0)裁剪到ImageView的宽高(outWith,outHeight)public cla
2021-04-16 13:09:11
1395
原创 Android Kotlin 数据类 data class 的相关总结
data class 是什么?kotlin中用于存储数据的类data class User(val name: String, val age: Int)data class 的特点优势自动生成重写以下方法:equals()/hashCode()toString() 例如 User(name=John, age=42)componentN() 来获取对应属性copy() 功能限制构造函数至少需要一个参数构造函数参数需要标记var或val数据类不能是抽象的,开放的,密
2021-04-08 19:31:49
1917
原创 Android 深拷贝(Deep Clone)和浅拷贝(Shadow Clone)相关总结
区别深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型浅拷贝(Shadow Clone)浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝(Deep Clone)深拷贝会另外创建一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。深拷贝实现方式(4种)序列化然后反序列化对象后,得到一个新对象手动创建新对象,遇到对象和数组时,手动创建新对象并将其赋值,手动创建新数组并遍历赋值重写 kotlin data class c
2021-04-08 18:39:42
1963
原创 Android AIDL和Binder机制相关学习总结
Binder参考资源为什么 Android 要采用 Binder 作为 IPC 机制?
2021-04-06 15:37:47
308
1
原创 Android Messenger跨进程通信相关学习总结
Messenger是什么?Messenger是对AIDL的封装,AIDL又是基于Binder机制实现的,使用Messenger能使我们更简单的实现进程间通信Messenger通常和Message、Handler一起使用Messenger用法将MyService放入单独的进程中android:process=":remote" <service android:name=".MyService" android:enabl
2021-04-05 17:54:46
255
原创 Android ContentProvider相关总结
ContentProvider概念特点优势缺陷数据访问工作机制访问设备数据ContentProvider是什么?四大组件之一(需要在Manifest中注册)并不能用于存储数据,只是为数据的访问提供一个统一的接口供多个应用程序共享数据(跨进程通信)自定义进程间通信和系统进程间的通信(例如通讯录,图库等)ContentProvider优缺点?其他Android 使用ContentProvider初始化你的Library、获取ApplicationContext
2021-04-03 16:29:11
167
原创 Java 注解(Annotation)的简单用法
注解处理器(APT,Annotation process tools)注解Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法注解分类源码注解注解只在源码中存在,编译成.class文件就不存在了编译时注解注解在源码和.class文件中都存在运行时注解(通过反射来调用)在运行阶段还起作用,甚至会影响运行逻辑的注解自定义注解定义import java.lang.annotation.Documented;import java.lang.annotatio
2021-03-31 11:57:32
116
asp.net的网站,能不能把子目录的一个页面做首页,如何设置?
2016-06-17
LINQ根据id查询数据,但数据id是不连续的,如何先判断该id的数据项是否存在
2016-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人