
android开发
文章平均质量分 90
TuGeLe
开放协作 追求卓越 知行合一 不忘初心
展开
-
使用配置文件的apk安装编译分析
众所周知JVM执行的是.class字节码,而Android的Dalvik或ART是不能直接运行.class文件,运行的是编译生成的dex文件,并且不同版本的Android在运行时对dex的编译策略也存在着变化。在Android4.4之前Android虚拟机是Dalvik,在Android2.2到Android4.4时期,其执行的时候采用的是JIT编译,当App运行时,每当遇到一个新类,JIT编译器...原创 2020-02-27 07:05:46 · 3014 阅读 · 0 评论 -
合成GIF时的透明处理与优化
在与图片相关的开发中难免会遇到gif的处理,由于gif这种格式的局限性,可能合成的gif文件和自己预想的出现明显差别。在我们的项目中就曾长期受到,透明图片合成gif后,透明位置变成黑色的问题困扰,我们就将bitmap添加一个白色的不透明背景,但是显而易见,这不是根本上解决问题的方法。原创 2018-12-26 22:13:35 · 3521 阅读 · 1 评论 -
Android程序架构优化
最近一段时间,看到了一些Android项目组件化相关的文章,同时,因工作需要对Java Spring框架进行了初步的学习,他贯穿整个应用系统的面向接口编程思想来解决业务逻辑和其他各层的松耦合问题的方案让我感受颇深,尤其是其通过控制反转(IoC)技术促进低耦合,面向切面的编程思想等,使程序员能够编写更简洁、易于管理的代码。借此机会,我对当前Android项目的整体架构进行了思考和优化,主要目的是为了...原创 2018-10-31 10:11:59 · 1487 阅读 · 1 评论 -
RxJava解析
RxJava解析RxJava的核心思想是通过链式调用使得异步代码调用变得简洁方便。看了网上其他一些介绍RxJava调用的文章时,对其使用和实现原理还是理解不到位,最后通过分析源码的调用弄明白了链式调用和线程切换的实现方式。本文章的内容分为三个部分:一、基本的调用方式 二、链式调用 三、线程切换一、基本的调用方式链式调用的实现:之所以能实现链式调用,是因为每个函数返回的对...原创 2018-08-31 16:16:22 · 347 阅读 · 0 评论 -
Android中缩放图片的方法
简介在Android项目中常常需要调整原始图片的尺寸大小以适应存储、传输和图片处理等需求。在Android API中提供了一些缩放图片的方法,在项目中发现,使用Android API中的Canvas、BitmapFactory和ThumbnailUtils等类的相关方法缩放图片,锯齿感明显,图像质量不高;另外还有一些第三方的开源库专门用于在Android平台缩放图片;在FFmpeg中也提供了缩...原创 2018-06-20 19:55:56 · 19226 阅读 · 1 评论 -
Android ffmpeg解析和合成gif
概述Android项目中使用ffmpeg3.0.9通过命令行调用的方式解析和合成gif。简单学习总结一下。解析gif,由gif得到一堆png/** * 解析gif图片 * @param gifPath gif图片地址 * @param pngDir 解析后图片保存目录 * @return */public static String[] gifToPng(String gifPath,...原创 2018-03-13 09:09:06 · 1605 阅读 · 0 评论 -
Android获取WAV音频时长
1.简介 wav(Waveform Audio File Format)是微软公司开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范。WAV是最接近无损的音乐格式,所以文件大小相对也比较大。 项目中需要获取wav音频文件的音频时长,因为之前获取gif文件的帧间隔是通过解析gif文件格式获取的,所以这次自然而然就想到通过解析...原创 2018-03-06 20:12:55 · 5451 阅读 · 1 评论 -
Android GLSurfaceView详解
学习在Android中使用OpenGL ES,就不得不提到一个控件:GLSurfaceViewGLSurfaceView从Android 1.5(API level 3)开始加入,继承自SurfaceView,实现了SurfaceHolder.Callback2接口,拥有SurfaceView的全部特性,也有view所有的功能和属性,特别是处理事件的能力,它主要是在SurfaceVie原创 2018-01-29 19:51:00 · 25507 阅读 · 4 评论 -
android SurfaceView 详解
普通的Android控件,例如TextView、Button和CheckBox等,它们都是将自己的UI绘制在宿主窗口的绘图表面之上,这意味着它们的UI是在应用程序的主线程中进行绘制的,由于应用程序的主线程除了要绘制UI之外,还需要及时地响应用户输入,否则的话,系统就会认为应用程序没有响应而出现ANR,对于一些游戏,摄像头预览、视频播放来说,它们的UI都比较复杂,而且要求能够进行高效的绘制,因此,它原创 2018-01-29 19:46:36 · 11674 阅读 · 0 评论 -
Android SO文件的兼容和适配
背景项目中要用到FFmpeg相关的功能,所以要引用FFmpeg相关的so文件,编译ffmpeg源码库后发现ffmpeg.so文件大小超过10M,这对于移动端应用是无法接受的,于是各种查资料、各种求助大神,终于压缩到了2.7M 左右(实际上还是很大) 。项目之前的so已经兼容了 armeabi、armeabi-v7a、armeabi-v7a、x86、x86_64、mi原创 2017-12-04 20:55:28 · 677 阅读 · 0 评论 -
WeakHashMap源码解析
在Java中很多开源框架都使用了WeakHashMap,它里面存储的key,value会随时间的推移慢慢减少(在 WeakHashMap 中,当某个“弱键”被回收后,WeakHashMap会将对应的Entry移除。更精确地说,对于一个给定的key,其映射的存在并不阻止垃圾回收器对该键的回收。某个key被回收时,它对应的键值对随后也会从映射中被移除。“弱键”的实现和清除,是通过WeakReferen原创 2017-12-04 19:23:42 · 264 阅读 · 0 评论 -
Android中HashMap内存优化之ArrayMap和SparseArray
ArrayMap及SparseArray是android的系统API,是专门为移动设备而定制的。用于在一定情况下取代HashMap而达到节省内存的目的。在Android开发中HashMap使用频率相当高,回顾一下HashMap的结构,其是以array存储链表的头结点,找到头结点后在进行遍历查找,如下图:时间效率方面,利用hash算法,插入和查找等操作都很快,原创 2017-11-24 21:36:56 · 1310 阅读 · 0 评论 -
ConcurrentHashMap
HashMap(since 1.2):使用链式地址法解决哈希碰撞,但是HashMap不是线程安全的,因此多线程操作时需要格外小心,因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。Collections.synchronizedMap() 函数返回的线程安全的HashMap这个的实现比较简单原创 2017-11-17 22:09:08 · 278 阅读 · 0 评论 -
CopyOnWriteArrayList解析
CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。其原理是: 初始化的时候只有一个容器,很长一段时间,这个容器数据、数量等没有发生变化,多个线程都是读取同一个容器中的数据,所以这样大家读到的数据都是唯一、一致、安全的,如果后来有线程往里面增加了一个数据,这个时候Copy原创 2017-11-10 20:34:22 · 513 阅读 · 0 评论 -
Android WebView使用和优化
本文介绍自己在使用WebView的过程中遇到的一些问题的解决方法和对WebView的一些优化实践浏览器缓存知识介绍:浏览器缓存之 Expires , max-age, Etag , Last-Modified (其中Expires,max-age是客户端在这个时间之前不去向服务器端发送请求验证资源是否有更新,Etag, Last-Modified是服务器决定是否需要返原创 2017-10-12 11:43:21 · 2126 阅读 · 0 评论 -
android硬件加速
在Android应用的开发过程中,我们经常会接触到“硬件加速”这个词。由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解很少,也不清楚了解底层原理的意义,因此常会有一些误解,如硬件加速是不是通过特殊算法实现页面渲染加速,或是通过硬件提高CPU/GPU运算速率实现渲染加速?都不是的,其实硬件加速就是运用GPU优秀的运算能力来加快渲染的速度,而通常的基于软件的绘制渲染模式原创 2017-10-12 11:17:46 · 1424 阅读 · 0 评论 -
MediaPlayer+TextureView全屏播放视频
项目需要做一个简单的播放视频功能demo,考虑到需求较简单(实现不超过2min的MP4格式短视频播放),所以就没考虑使用复杂的第三方视频库了。最初敲定使用系统原生的VideoView实现,后来发现不能在列表中使用普通的VideoView 。VideoView 继承自SurfaceView,而SurfaceView并没有UI同步缓冲区。这就导致了在列表滚动的时候,正在播放的视频可能无法跟上滚动的原创 2017-09-22 19:03:56 · 1396 阅读 · 0 评论 -
GIF文件学习
1.概述最近参与的项目是一个和表情相关的App,也就理所当然的和GIF打交道了。下面就项目中遇到的和GIF相关的问题及解决办法分享出来,第一次接触GIF,了解的不多,希望能和大家共同探讨学习。本文学习参考博客:gif格式图片详细解析。2.GIF简介图像互换格式(GIF,Graphics Interchange Format)是一种位图图形文件格式,以8位色(即256种颜原创 2017-06-19 20:10:35 · 1221 阅读 · 0 评论