自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(356)
  • 资源 (6)
  • 问答 (2)
  • 收藏
  • 关注

原创 Android重要知识点学习总结

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

2021-01-31 19:07:40 822 1

原创 FFmpeg命令实例合集

ffmpeg命令实例

2019-11-15 17:41:55 3895 2

原创 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 918

原创 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 914

原创 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 11

原创 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 13

原创 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 51

原创 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 74

原创 Android ViewModel和LiveData源码分析

获取动态数据时使用例如:获取首页的列表,首次加载和加载更多时,数据是变化的,此时使用livedata中存储每次请求的结果,在activity中统一进行观测即可。如果是第一页,则setData否则addData。在列表刷新和加载更多时,只需要一行调用ViewModel.refreshData或ViewModel.loadMoreData方法即可,不需做其他逻辑操作,都交给ViewModel处理优势:简洁逻辑清晰。对同一类型的数据集中处理。非动态数据时可以不用livedata例如获取优.

2021-05-26 11:25:08 63 6

原创 【设计模式】观察者模式(Observer)

观察者模式观察者模式的定义:指多个对象间存在一对多的依赖关系,当一个对象发生改变时,所有依赖他的对象都会得到通知并自动更新。这种模式又被称为发布—订阅模式、模型—视图模式,它是对象行为型模式。观察者模式的优点:降低目标与观察者之间的耦合关系,两者是抽象耦合关系。自定义观察者模式Java中自带的Observable和Observer参考资料观察者模式(Observer模式)详解...

2021-05-20 12:46:53 72

原创 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 26

原创 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 157 1

原创 Android Retrofit源码分析

Retrofit用法Retrofit注解请求方法类序号名称说明1GETget请求2POSTpost请求3PUTput请求4DELETEdelete请求5PATCHpatch请求,该请求是对put请求的补充,用于更新局部资源6HEADhead请求7OPTIONSoption请求8HTTP通用注解,可以替换以上所有的注解,其拥有method、path、hasBody三个属性参数类| 分类 | 名称

2021-05-11 17:36:59 43

原创 Android ThreadLocal相关源码和在Looper中的使用

java 线程的工作内存和ThreadLocalJava 并发 - ThreadLocal详解

2021-05-07 13:36:08 29

原创 Android 几种计时器的实现(RxJava、CountDownTimer 、线程池、Handler)

Android 几种计时器的实现

2021-04-29 17:54:15 101

原创 Android开发中的==、equals、hashcode的区别和联系

定义==gradlew clean assembleVestRelease参考资料Java 中的 ==, equals 与 hashCode 的区别与联系

2021-04-22 19:24:15 56

原创 【设计模式】代理模式总结(静态代理、动态代理)

代理模式代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。静态代理这种代理方式需要代理对象和目标对象实现一样的接口。特点冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。静态代理在编译时就已经实现,编译完成后代理类是一个实际的class文件接口public interface IUserDao { public void save();}实现类

2021-04-19 18:14:16 50

原创 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 73

原创 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 322

原创 Android APK打包流程

打包流程多渠道打包参考Android中apk打包流程

2021-04-14 15:34:56 327

原创 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 250

原创 Android 深拷贝(Deep Clone)和浅拷贝(Shadow Clone)相关总结

区别深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型浅拷贝(Shadow Clone)浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。深拷贝(Deep Clone)深拷贝会另外创建一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。深拷贝实现方式(4种)序列化然后反序列化对象后,得到一个新对象手动创建新对象,遇到对象和数组时,手动创建新对象并将其赋值,手动创建新数组并遍历赋值重写 kotlin data class c

2021-04-08 18:39:42 258

原创 Android AIDL和Binder机制相关学习总结

Binder参考资源为什么 Android 要采用 Binder 作为 IPC 机制?

2021-04-06 15:37:47 101 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 100

原创 Android ContentProvider相关总结

ContentProvider概念特点优势缺陷数据访问工作机制访问设备数据ContentProvider是什么?四大组件之一(需要在Manifest中注册)并不能用于存储数据,只是为数据的访问提供一个统一的接口供多个应用程序共享数据(跨进程通信)自定义进程间通信和系统进程间的通信(例如通讯录,图库等)ContentProvider优缺点?其他Android 使用ContentProvider初始化你的Library、获取ApplicationContext

2021-04-03 16:29:11 63

原创 Java 注解(Annotation)的简单用法

注解处理器(APT,Annotation process tools)注解Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法注解分类源码注解注解只在源码中存在,编译成.class文件就不存在了编译时注解注解在源码和.class文件中都存在运行时注解(通过反射来调用)在运行阶段还起作用,甚至会影响运行逻辑的注解自定义注解定义import java.lang.annotation.Documented;import java.lang.annotatio

2021-03-31 11:57:32 46

原创 Android EventBus原理和源码学习总结

EventBusEventBus主页参考资料开源组件:EventBus

2021-03-25 15:05:39 190

原创 Android Proguard混淆相关总结

Proguard是什么?关于如何进行反编译混淆Java代码是非常容易反编译的,为了很好的保护Java源代码,我们往往需要对编译好的class文件进行混淆处理ProguardProguard是一个混淆代码的开源项目,它的主要作用是混淆,让然它还能对字节码进行缩减体积、优化等Proguard开启开启混淆(build.gradle/app)minifyEnabled true buildTypes { release { minifyEnab

2021-03-23 16:01:09 31

原创 Android反编译相关总结(apktool、dex2jar、jd-gui)

反编译资源(apktool)apktool下载地址主要有两部分(apktool.bat和apktool.jar)* 将需要反编译的apk也放在该目录下打开cmd命令行工具进入到该目录下输入以下命令等待完成结果res中是资源相关的文件,发现是可以查看的(图片,布局等)smali是代码文件,但是不是java的,它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言反编译代码(dex2jar、jd-gui)dex2jar下载地址解压demo.apk,将classes.d

2021-03-22 14:34:19 109

原创 Android每日首次访问和安装后的首次访问

private fun isShow(): Boolean { //判断是否显示过了,只需要显示一次 val key = "isShowPreferGuide" if (SharePrefUtils.get(requireContext(), key, true)) { SharePrefUtils.put(requireContext(), key, false) return true ...

2021-03-22 14:33:37 114

原创 Android 使用DialogFragment时出现的一些问题

问题一:show方法引起的异常DialogFragment中的一段代码,使用了ft.commit() public void show(@NonNull FragmentManager manager, @Nullable String tag) { mDismissed = false; mShownByMe = true; FragmentTransaction ft = manager.beginTransaction();

2021-03-16 16:40:49 545

原创 Kotlin和Java互调空指针相关的问题(两种可能NullPointerException的情况)

情况一Java调用Kotlin时,如果强制传入一个空值,则会抛出空指针异常Java代码public class MyTest { @Test public void test(){ Mete.getAll(null); }}kotlin代码object Mete { @JvmStatic fun getAll(id: String) { println("getAll: $id") }}J

2021-03-16 12:58:26 206 1

原创 Java中,直接定义一个字符串和newString的区别

String s1 = "a" 时,首先会在字符串常量池中查找有无 “a” 这个对象。 若没找到,就创建一个 "a" 对象,然后,以 s1 为它的引用。若在字符串常量池中找到了 “a” 这个对象,同样也将 s1 作为它的引用。若再执行一次 String s2 = "a" , 那么 s1 和 s2 都是同一个对象的引用,即 逻辑判断 s1 == s2 的结果是 true。String s...

2021-03-15 16:13:45 167

原创 Android Service+协程的简单用法

Service+协程Android 8.0 以上不推荐使用IntentService了,Google推荐使用JobIntentService由于线程的不好控制,可以使用协程来代替启动协程job = GlobalScope.launch停止协程job?.cancel()class MyService : Service() { companion object { private const val TAG = "MyService" var s

2021-03-10 16:22:08 671

原创 Android BroadcastReceiver 广播接收者跨进程通信的简单Demo

跨进程通信(a发送消息到b)权限,两个程序都需要加入该权限。自定义的一个权限 <uses-permission android:name="com.zhangyu.receivebroadcast.intent.permission.MyReceiver" /> <permission android:name="com.zhangyu.receivebroadcast.intent.permission.MyReceiver"/>b程序中的广播接收者

2021-03-05 17:52:52 129

原创 Android BroadcastReceiver 广播接收者监听WiFi状态

创建一个广播监听WiFi状态class WifiStateReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action if (WifiManager.WIFI_STATE_CHANGED_ACTION == action) { // wifi status .

2021-03-05 17:10:32 218

原创 Android组件化,几种路由方案的对比选型(Intent、Navigation、ARouter)

什么是路由页面间跳转关系映射,可以通过字符串、别名等方式实现跳转Intent跳转过程无法控制,一旦调用了startActivity(Intent)便交由系统执行,中间过程无法插手跳转失败无法捕获、降级,出现问题直接抛出异常显示Intent显示Intent中因为存在直接的类依赖关系,导致耦合严重隐式Intent隐式Intent中会出现规则集中式的管理,导致协作困难,都需要在Manifest中进行配置,导致扩展性比较差ARouter和Navigation对比ARouter用法

2021-03-04 14:55:48 780 3

原创 Java计算并返回x的平方根(向下取整)

LeetCode求平方根

2021-03-03 16:11:34 449

原创 Java二叉树的遍历(先序、中序、层序、后序)

LeetCode求给定的二叉树的前序遍历。思想输出顺序根>左>右算法(非递归)使用栈来实现 public ArrayList<Integer> preorderTraversal(TreeNode root) { //结果的存储 ArrayList<Integer> result = new ArrayList<>(); if (root == null) return resul

2021-02-24 18:56:53 104 1

原创 Android Glide下载图片到本地(相册中)

/** * 下载到本地 * @param context 上下文 * @param url 网络图 */ private void saveImgToLocal(Context context, String url) { //如果是网络图片,抠图的结果,需要先保存到本地 Glide.with(context) .downloadOnly() .load(u...

2021-02-23 16:43:25 3245 1

OpenCVTest

https://blog.csdn.net/yu540135101/article/details/82593860

2018-09-11

FFmpeg最新版20181111安装包

使用说明 https://blog.csdn.net/yu540135101/article/details/83964050

2018-11-18

Matisse-0.5.2-beta3.zip

Matisse-0.5.2-beta3.zip

2019-03-23

vm_ubuntu_xshell.rar

VM Ubuntu XShell 安装教程 VM Ubuntu XShell 安装教程

2019-07-14

jdk-linux-x64.zip

jdk-8u221-linux-x64.tar.gz jdk-8u221-linux-x64.tar.gz

2019-08-18

SimpleCropView-master.zip

SimpleCropView-master.zip

2019-03-23

空空如也

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

TA关注的人 TA的粉丝

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