- 博客(18)
- 收藏
- 关注
原创 Java-多线程反转数组
题目 给定一个整型数组int[] arr,使用threadCounts个线程对该数组中的元素进行反转。分析 1.假设数组长度为n,反转的原理是将第i个元素和第(n - 1 - i)个元素进行交换。 2.如果数组aar为空或者长度为0或者1,直接返回当前数组即可,不需要进行交换。 3.如果数组aar的长度为2或者3,那么只需要将第1个元素和最后一个元素交换即可,不需要创建多个线程。 4.如果给定线程数量threadCounts小于数组的长度arrLen,那么创建threadCounts个线程,否
2021-03-06 14:55:22 384 6
原创 Android Handler机制
大家都知道,Android不允许在子线程更新UI,所有的UI操作都在主线程完成,当我们在子线程处理完一些逻辑后需要更新UI怎么做呢,大家都知道可以通过Handler来实现。我们来看一下示例代码:private Handler mHandler = new Handler() { @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(m...
2020-11-19 15:54:35 132 2
原创 通过普通类实现枚举
平时开发过程中,我们在接受某个参数的时候,该参数是一个对象,并且只能是固定的某几个对象,假如我们定义了一个类Color,我们程序中只有两种Color,WHITE和BLACK,这种情况下我们可能首先想到的是通过关键字enum定义一个枚举类,今天我们不通过enum关键字来实现这种效果。 首先,Color这个类,只能有2个实例化对象,WHITE和BLACK,也就是说外界不能再创建Col...
2019-05-19 16:18:44 309
原创 Integer对象的创建方式以及区别
本文主要探讨以下三种方式生成一个Integer对象的区别1.Integer num= 130;2.Integer num = new Integer(12);3.Integer num = Integer.valueOf(12); 方式1:直接将一个int赋值给一个Integer对象,这个时候130这个int值会被自动装箱成一个Integer对象。我们采用如下代码来...
2019-05-19 16:07:10 6622
原创 Android基础之编译打包签名流程
Android编译打包的步骤如下: 1.生成R.java文件 2.将aidl文件生成java文件 3.将java文件编译成class文件 4.将class文件打包成classes.dex文件 5.打包资源文件(res、assets、AndroidManifest.xml等) 6.生成未签名的apk文件...
2018-09-20 14:30:56 1039
原创 线程间通信之CountDownLatch
之前看一个开源项目,里面用到了CountDownLatch,当时莫名其妙,不知道这个东西是干嘛的,后来查阅源码才知道这个东西这么好用,那么CountDownLatch是干嘛的呢,简单来说就是一个同步辅助工具类,使用它可以实现在某些线程执行完毕之后再执行另外一些线程,即某些线程执行的时候另外一个线程处于等待状态。我们平时需要在某一个子线程执行完毕之后再执行一些操作,当然可以直接在线程结束后调...
2018-09-02 22:48:50 443
原创 自定义View之圆角View
最近项目里面遇到了需要实现圆角控件的需求,网上百度发现并没有找到一个特别简单的方法,大都是通过Paint.setXfermode来实现的,如果只想快速实现效果,直接点击https://github.com/ShadowWalkerGIT/RoundView 那么Paint.setXfermode是用来干嘛的呢,我们看看源码注释/** * Set or clear the t...
2018-09-01 23:42:50 3972 2
原创 Android 自定义View之getLeft() / getX() / getRawX()的区别
在自定义View的时候,如果涉及到滑动改变控件的位置或者手动设置控件的位置,那么必然会接触到getLeft() getX() getRawX()这三个方法,那么这3个方法有什么区别呢。我们先看一张图我们再看看View.java源码注释 /** * Left position of this view relative to its parent. *...
2018-08-26 19:26:44 2265
原创 Glide--解析
Glide相信大家并不陌生,我项目里面用的也是Glide,但是一直在用,一直也听别人说它好,但是具体哪儿好呢?今天我就来跟大家分享一下Glide的优点。 作为一个图片框架,最核心的就是其缓存机制,这里我们就来分析一下Glide的缓存机制。Glide采用的是二级缓存: 1.磁盘缓存和内存缓存。磁盘缓存主要是为了防止应用重复从网上下载图片,浪费资源和流量。 ...
2018-08-20 23:12:49 305
原创 AndroidVideoCache解析
前言 之前做短视频项目,需求是需要视频缓存功能,我也觉得比较合理,毕竟一个视频看完之后重复观看的时候还需要从网上加载是很不友好的事情,一方面耗费用户的流量,另一方面直接从本地播放要更流畅,特别是在seek的时候。在github上看到了AndroidVideoCache,使用起来非常方便,大概知道它是用代理实现的,但是代理具体怎么做的一直没去深究,今天刚好得空,好好研究下,和大家分享。...
2018-08-08 19:50:28 5966 4
原创 数据结构之LinkedHashMap
Map:Map是一个接口,它定义了一些规则,即get和put操作。Map用于保存具有映射关系的数据,因此Map集合中存的是键值对,并且key不能重复 HashMap:HashMap是Map接口的一个实现类。HashMap提供所有可选的映射操作,并且允许存null键和null值,它不保证映射的顺序,特别是不保证该顺序永远不发生改变。HashMap的迭代所需的时间和HashMap实例的...
2018-05-10 11:15:24 3747 2
原创 垃圾回收算法
常用的垃圾回收算法 1.Mark-Sweep(标记-清除算法) 标记-清除算法和它的名字一样,算法分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收被标记的对象。 特点:1)标记-清除算法不会进行对象的移动,直接回收不存活的对象,因而会造成内存碎片 :2)虽然内存回收了但是很可能会发生OOM,如上图所示,假设现在要分配10个格子内存,虽...
2018-05-03 17:11:00 196
原创 下载工具类(带缓存)
前言:由于项目里面经常需要用到下载,所以封装了一个下载工具类。 实现方案:1.下载之前查找本地有没有缓存记录 2.如果有缓存记录,那么判断缓存文件是否存在,如果存在,直接回调下载结束,否则从网络下载 3.缓存的key采用文件下载url生成的md5 4.下载失败的时候...
2018-04-17 17:35:56 396
原创 设计模式之适配器模式
适配器模式:适配器模式也称包装样式或者包装,通常用于现有接口无法满足用户需求的情况,它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。比如说我们经常做的JavaBean的转换,又或者生活中的电源适配器,转接头等 适配器模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望 分类:适配器模式主要分为3类:类适配器模式、对象适配器模式、缺省适配器模式 ...
2018-04-15 01:16:18 171
原创 Android性能优化
前言:还记得之前做一个app,服务器在新加坡,国内访问新加坡的网速很慢,再加上测试机又是东南亚的低端机,导致开发的时候经常遇到app卡死的情况,因而开始重视Android性能优化,个人觉得Android性能优化主要有以下几方面:网络优化、内存优化、布局优化、线程控制、精简app大小,下面就跟大家分享一下我在这些方面所做的一些优化 1.网络优化:每次打开一个界面的时候我们可能会去请求服...
2018-04-12 23:02:04 218
原创 保存文件到本地相册更新相册后删除该文件相册仍然有该文件缩略图的问题
1.问题:最近做一个保存视频到本地功能,起初视频保存到本地后,相册数据库没有刷新,导致相册里面找不到该视频,这个通过MedisScannerConnection解决,链接https://blog.csdn.net/zhqw_csdn/article/details/79882745 后来,又需要将该文件删除,但是删除后本地相册仍然能看到缓存的文件夹和文件,只是文件无效而已 2.原因:...
2018-04-12 16:26:46 1644
原创 使用LeakCanary进行内存溢出检测
1.问题:平时由于工期比较紧,写代码的时候可能想的不是那么周全,大多情况下追求的是功能是否实现,却忽略了性能问题,比如说算法、数据结构、内存消耗等,今天主要分享内存泄漏的分析与解决方案 内存泄漏:所谓内存泄漏就是指本该回收的内存还驻留在内存中 1.1 Android内存回收机制:Android虚拟机采用的是根节点搜索算法枚举根节点判定是否是垃圾,虚拟机会从G...
2018-04-11 18:06:27 815
原创 Android视频录制,保存图片,视频到本地后本地相册或者视频库里面没有的解决方案
1 问题:最近要做一个将服务器视频保存到本地的功能,将视频保存到本地后发现本地相册里面并没有更新该视频,纠其原因是系统的媒体数据库并没有实时的更新 2 解决方案:利用MediaScannerConnection主动去扫描扫描媒体数据库 步骤:1.在Activity onCreate里面创建成员变量MediaScannerConntion并调用MediaScanner...
2018-04-10 16:18:14 7058 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人