Android
文章平均质量分 67
Watch_the_corner
待人真诚,做事有上进心,头脑灵活,接受能力强。处事自信、认真、有主见,不怕辛苦。
我憧憬做一个事业成功的人、能带快乐给身边人的人。
觉得很有意思,也是驱使我有强烈求知欲的一句话——
“玉不打磨雕刻,不会成为精美的器物;人若是不学习,就不懂得做人的道理,也就成不了大器。”
展开
-
Android Fragment复用
Android Fragment复用概述为什么要复用Fragment为何避免使用 FM.getFragmentsFragmentManager.findFragmentById 的使用FragmentManager.findFragmentByTag 的使用ViewPager 复用之 FragmentManager.getFragment 的使用一、 为什么要复用Fragment根本原因只有一个:Activity 在重建的时候会恢复其包含的 FragmentManager ,Fragme原创 2020-07-15 16:26:04 · 1359 阅读 · 0 评论 -
Android应用常用的加密方式
Android数据加密的方式,按加密的内容是否可以还原,可以分为可逆加密和非可逆加密。非可逆加密: 加密后的数据不能还原成原来的数据,如MD5,sha1。可逆加密: 可逆加密有一个公钥和一个私钥,通过公钥加密,私钥解密。常用的有:RSA,AES。MD5使用场景:1.一致性验证,比如下载某个文件,不知道文件是否下载完成,可以MD5进行校验。加密文件比较耗时,应放到子线程中。2.密码的...原创 2019-03-31 16:49:03 · 873 阅读 · 0 评论 -
Android应用启动时间优化
背景应用启动时间是衡量APP用户体验的第一道门,一般情况下应用启动时间在1秒以内,用户会觉得响应时间很快;1-3秒内完成启动,用户会觉得启动速度还可以;超过3秒,用户就会觉得很慢;超过5秒,用户会直接放弃这个应用。应用启动时间的定义在Android系统中把启动分为冷启动,热启动,温启动。三者的过程各不相同,其中以冷启动过程最为繁琐,时间消耗最长...原创 2019-04-05 17:22:25 · 989 阅读 · 1 评论 -
Android懒加载
什么是懒加载?为什么要用懒加载?###1、什么是懒加载懒加载就是当ViewPager和Fragment结合在一起使用时,Fragment呈现在用户面前时才加载数据,当其从未被呈现在用户面前时,不会执行加载数据的代码。这就是我所理解的懒加载。2、为什么要用懒加载ViewPager默认会预加载下一页,对于某些重量级的Fragment来说无疑会造成很大的开销,当然了,如...原创 2019-04-05 17:54:36 · 605 阅读 · 0 评论 -
Android基于Socket的网络编程
服务端:1.用指定的端口实例化一个ServerSocket对象。2.调用ServerSocket的accept()方法,以等待连接,并阻塞。3.利用accept()方法返回的Socket对象,进行IO读写操作。4.关闭流,回收资源。代码实现: /** * 基于TCP协议的Socket通信,实现用户登录,服务端 */ //1、创建一个服务器端Socke...原创 2019-04-01 11:58:07 · 243 阅读 · 0 评论 -
Android开源项目
https://www.jianshu.com/p/e494941f687f原创 2019-04-06 18:22:57 · 202 阅读 · 0 评论 -
Android 进程保活
在系统内存不足的情况下,系统会依据自身的一套进程回收机制来回收掉一些进程,以腾出内存来供给需要的app,这套进程回收机制就叫做Low Memory Killer。然而某些应用需要在后台常驻以满足一些需求,比如后台接收推送消息等。那么如何保持进程常驻呢,总结了如下方案:1.利用Android前台Service的漏洞,之前看Tinker源码发现也是使用这种方式。具体步骤:对于Api < 18...原创 2019-03-28 12:36:27 · 243 阅读 · 0 评论 -
Android开源的UI特效
https://www.jianshu.com/p/71bb7c51b9ea原创 2019-04-07 17:32:36 · 429 阅读 · 0 评论 -
Android IPC机制—Binder的工作机制
Binder是一种进程间通信机制Binder架构Binder通信机制采用C/S架构Binder框架中主要涉及到4个角色Client、Server、Service Manager及Binder驱动,其中Client、Server、Service Manager运行在用户空间,Binder驱动运行在内核空间Client代表客户端进程,Server代表客户端进程提供各种服务...原创 2019-04-07 21:45:13 · 605 阅读 · 0 评论 -
Android中CMakeList的编写方法
CMake是一个跨平台的安装编译工具,可以用简短的语句来描述各个平台的安装编译过程。在CMakeList开头应设置好工程的jni文件目录,比如:set(distribution_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)如果有用到第三方库,这里还需要引入第三方头文件:include_directories(src/main/jniLibs/incl...原创 2019-04-02 17:40:27 · 1217 阅读 · 0 评论 -
Android 多渠道打包
多渠道打包是为了统计不同渠道的数据,方便在推广运营过程中进行有效的渠道比较。下面记录几个常用的多渠道打包的方式:1.友盟多渠道打包**原理:**在AndroidManifest.xml的Application的Metadata节点下放置各渠道的标识,然后通过java获取对应的渠道信息。步骤:1.在AndroidManifest中添加appkey和渠道占位符信息;2.在gralde中添加...原创 2019-03-29 11:48:35 · 320 阅读 · 0 评论 -
GreenDao集成与使用
GreenDao是一款开源的轻便快捷的数据库框架,无需编写复杂的SQL语句,在性能方面,GreenDao针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小 同时还是支持数据库加密。一、GreenDao集成首先在项目的build.gradle中添加:dependencies { classpath 'org.greenrobot:greendao...原创 2019-04-08 17:40:35 · 272 阅读 · 0 评论 -
ORMLite的集成和使用
Android中最常用的数据库框架有ORMLite和GreenDao,ORMLite相比GreenDao来说更加轻量,并且学习成本也较低。由于ORMLite是基于反射机制工作的,所以相比GreenDao来说效率较低。在module的build.gradle中添加依赖: compile 'com.j256.ormlite:ormlite-android:5.0' compile '...原创 2019-04-09 12:01:54 · 271 阅读 · 0 评论 -
Picasso源码解析
Picasso的使用//加载一张图片Picasso.with(this).load("url").placeholder(R.mipmap.ic_default).into(imageView);//加载一张图片并设置一个回调接口Picasso.with(this).load("url").placeholder(R.mipmap.ic_default).into(imageView, ...原创 2019-04-04 16:59:56 · 214 阅读 · 0 评论 -
Android线程池的使用
为什么要使用线程池1.重用线程池中的线程,避免线程的创建和销毁带来的性能开销;2.能有效的控制线程池中的线程并发数,避免大量线程之间互相抢占资源导致阻塞;3.能对线程进行简单的管理,并提供定时执行或间隔循环执行任务;ThreadPoolExecutorAndroid中的线程池概念是来源于java中Executor,Executor是一个空接口,真正的线程池实现是ThreadPoolE...原创 2019-03-30 11:46:35 · 193 阅读 · 0 评论 -
Android使用FFmpeg+Opengles来解码播放视频(二)
上一节已经完成了视频的解码部分,现在来实现视频的渲染。 Demo地址:https://github.com/Huzhuwei1/ffmpegdecoder.git为什么使用Opengles来做视频渲染?1.Opengles使用GPU渲染,能分担CPU压力,避免手机发热。 2.支持图片处理。比如图片色调转换、美颜等。 3.并支持三维图像处理,可以实现各种Vr效果。一、首先我...原创 2018-08-30 11:34:27 · 1646 阅读 · 0 评论 -
开发笔记——LinkedBlockingQueue
最近工作上收到一个测试问题,在小米4等部分机型上应用容易闪退。然后查到原因是内存溢出,这里记录一下。错误信息:然后定位到GL2JNIView这个类 根据错误信息可以知道是创建线程时出现内存溢出,然后再看一下YUVThreadclass YUVBufferThread extends Thread { private YUVBuffer yuvBuf; priv...原创 2018-09-07 16:56:05 · 938 阅读 · 4 评论 -
Android9 新特性
1.Wi-Fi RTT 进行室内定位室内WIFI定位 Android P增加了对RTT Wi-Fi协议的支持,以此作为室内定位的基础。在支持硬件支持的Android P设备上,开启定位并且打开WIFI扫描后就可以使用该功能进行定位。应用可以测量与附近支持RTT的Wi-Fi接入点(AP)的距离。设备必须启用位置并启用Wi-Fi扫描(在设置>位置下)。使用这个功能不会连接到WIFI,而且为...原创 2018-10-19 15:26:44 · 698 阅读 · 0 评论 -
Android 音频渲染之AudioTrack
Android平台下的音频渲染在java层有三个API,分别是MediaPlayer、SoundPool和AudioTrack ,它们的使用场景如下:MeidaPlayer : 适合在后台长时间播放本地音乐文件或者在线的流式媒体文件,封装的比较好,使用相对较简单,但是可操作性差。SoundPool:适合播放比较短的音频片段,如对讲开启声、按键声等,可以同时播放多个音频。AudioTrack...原创 2018-10-27 15:08:51 · 645 阅读 · 0 评论 -
Android音频开发之OpenSL ES
关于OpenSL ESOpenSL ES 全称是Open Sound Library for Embedded Systems , 即嵌入式音频加速标准。OpenSL ES 是开源免费、跨平台、针对嵌入式系统优化的硬件音频加速API。它为开发者提供了标准化、高性能、低响应时间的音频功能实现方法。在使用OpenSL ES前,需要对OpenSL ES中的对象和接口的概念有一定的了解。对象:对象...原创 2018-11-23 17:50:19 · 573 阅读 · 0 评论 -
Android使用MediaCodec编码AAC
关于MediaCodecMediaCodec 是Android系统提供的硬件编码器,它可以利用设备的硬件来完成编码,从而提高编码效率,并可以减轻CPU压力降低电量的使用,但是必须是4.1以上的系统才可以使用。MediaCodec编码出来的AAC数据是裸的AAC,即AAC的原始数据块,一个AAC原始数据块的长度是可变的,对原始帧加上ADTS头进行封装,就形成了ADTS帧。ADTS的全称是Audi...原创 2018-11-30 15:16:03 · 1151 阅读 · 0 评论 -
OkHttp源码分析
上面是Okhttp发起一个同步/异步请求时,方法调用流程图。Okhttp的使用//设置超时的时间 OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .writeTimeou...原创 2019-02-21 18:00:34 · 233 阅读 · 0 评论 -
Android热修复——Tinker集成
前言现在市场上的热修复工具或者框架有很多很多,除了Tinker比较出名的还有阿里的 AndFix、美团的 Robust 以及 QZone 的超级补丁方案。每个方案的优缺点如下图:阿里AndFix接入简单,不过兼容性不太好;QZone方案对性能损耗较大并且补丁大小较大;美团的 Robust兼容性好,但是尚未开源。所以,如果选择开源的热修复方案,Tinker是最佳的选择。下面记录一下Tinke...原创 2019-02-20 15:09:50 · 302 阅读 · 0 评论 -
Android热修复——Tinker源码分析
从Tinker的官方文档上可以看到,接入Tinker是在Application中,所以切入点就从Application开始;public class TinkerApplication extends Application { private ApplicationLike tinkerApplicationLike; @Override public void o...原创 2019-02-20 17:25:39 · 520 阅读 · 0 评论