- 博客(18)
- 资源 (9)
- 收藏
- 关注
原创 Android单元测试之Local unit tests(下)
Android单元测试之Local unit tests(下)前言Robolectric添加依赖测试例子-Robolectric基本使用无处不在的 shadowXXX 是什么?测试例子-Robolectric使用进阶@Config(qualifiers =”“) 配置测试例子-Activity的生命周期自定义Shdow类附加模块JUnit 4 & Mocki...
2018-04-10 16:57:40
800
原创 Android单元测试之Local unit tests(上)
Android单元测试之Local unit tests(上)简介本地单元测试JUnit 4添加依赖测试例子结论Mockito添加依赖测试例子-mock基本使用测试例子-mock与spy区别测试例子-异步任务回调测试例子-mock注解测试例子-mock Android dependencies结论未完待续参考链接Android...
2018-04-10 16:53:38
712
原创 Android组件间通信之LocalBroadcastManager
Android组件间通信之LocalBroadcastManagerLocalBroadcastManager介绍LocalBroadcastManager源码分析总结Android组件间通信之LocalBroadcastManagerAndroid开发中,大家都使用过全局广播(global broadcast)。 优点是操作简单,还可以进行跨进程通信。 缺点是
2018-02-07 17:34:25
792
原创 Android权限适配全攻略
Android权限适配全攻略概述在Android6.0(API 23)之前Android的权限机制太过于简单粗暴:App安装时会提示用户APP所需权限,用户同意安装后就会永久授权应用所需全部权限。其中大部分用户并不知道为什么APP需要这些权限,也不知道这些权限意味着什么。这样很容易被“别有用心”的APP利用,对用户的隐私及账户安全形成了很大的挑战。Google也开始意识到问题的严重性并且开始收紧权限
2017-10-09 14:49:43
3609
原创 Android Tint的使用及源码分析
背景使用Tint实现背景着色使用selector进行着色着色原理如何兼容低版本背景在菜单栏改版开发中,发现需要引入大量图片,其中像设置开关部分差异仅在颜色,但是需要两张图片。这样包体随着图片的添加也会变大。有没有更好的办法呢? 使用Tint实现Android在5.0的时候推出Tint可以很方便的将一张图片”着色”为任何颜色。这样我们只需要放一张图片即可
2017-04-11 16:36:52
1090
原创 LayoutInflater Factory使用基础与进阶
问题背景在开发新版本中,遇到一个问题是需要把所有的TextView与继承TextView的View替换为自定义TextView,这个改动对我们项目来说工作量是巨大的。那么有没有好办法呢?想想在使用android support library时,view有些属性本来是不支持的,突然就支持了而且能向下兼容。那是怎么实现的呢?其实就是使用LayoutInflater Factory,将XXXView替换
2016-12-27 20:36:57
5123
1
原创 设置页弹框背景不透明问题分析及解决
一、问题背景在开发新版本时,有个需求是用户通过点击跳转到系统设置界面时,弹出一个对话框。对话框用来描述为什么需要用户进行设置,引导用户完成开启设置。在自己的activity中弹出对话框大家都知道怎么做,但是在系统设置界面弹出对话框肯定没那么方便了。一开始有两个方向:在打开设置页同时打开一个dialog样式的activity,这样给人的感觉就像是真正的对话框。使用悬浮窗,将d
2016-12-07 13:17:52
2229
原创 App冷启动白屏/黑屏问题分析及解决方案
一、问题背景最近在做产品首次启动页优化功能时,发现在点击启动launch图标与切换到子进程页面时会白屏或黑屏一段时间,时间长短根据不同机型性能不一。原来看过相关文章,借此机会总结一下app启动的闪屏页面是怎么产生的,该如何优化?二、问题分析既然我们想要优化app启动速度,那我们肯定要了解app启动的几种模式:冷启动(Cold start),热启动(Warm start),温启动(Lukewarm s
2016-11-23 21:27:21
1187
原创 Android 5.1 WebView内存泄漏问题及解决
问题背景在排查项目内存泄漏过程中发现了一些由WebView引起的内存泄漏,经过测试发现该部分泄漏只会出现在android 5.1及以上的机型。虽然输入法项目使用WebView的场景并不多,但秉承着一个泄漏都不放过的精神,我们肯定要把它给解决了。遇到的问题项目中使用WebView的页面主要在FAQ页面,问题也出现在多次进入退出时,发现内存占用大,GC频繁。使用LeakCanary观察发现有两个内存泄漏
2016-11-21 14:22:49
10289
2
原创 Bitmap使用过程中需注意的点及优化
一、问题背景 输入法产品跑monkey时在部分机型上会出现oom,最终堆栈信息都是指向BitmapFactory.decodeStream也就是decode图片到内存时出现的。借着这个机会总结一下Bitmap使用过程中需注意的点及优化。 二、总结的问题 decode图片时内存占用是怎么计算的? BitmapFactory.decodeXXX api会对图片做哪些操作? 该如何优化? 三
2016-10-26 18:30:51
622
原创 Android PorterDuffXfermode使用中的一些坑
概述在android canvas绘图中经常会使用到Paint.setXfermode()来给画笔设置一个Xfermode;Xfermode是一种将所绘制的图形的像素按照一定模式进行混合从而形成新的像素值。Xfermode有三个子类:AvoidXfermode、PixelXorXfermode、PorterDuffXfermode;前两个已经废弃了,我们使用的最多的就是PorterDuffXferm
2016-08-02 18:08:02
7623
2
原创 浅析多线程同步
问题背景在android开发中,我们会启一个子线程去服务器获取下发数据,这个操作一般都是比较耗时的。所以对于时效性不强的数据,为了避免每次请求服务我们一般会做缓存处理。常见的缓存策略是在本地和内存中各缓存一份,获取数据时优先从内存中获取,内存中没有则从本地获取,都没有才会去访问服务器重新获取。这种方式保证了高效的性能,操作内存缓存时也导致了可能的错误:线程干扰 与 内存一致性 的问题。什么
2016-07-20 16:15:26
405
原创 Web滑动日期选择器(仿iOS)
datepicker.mobile移动web端统一使用体验,在ios上通过select标签滑轮的效果很赞,但是android不同版本表现各异,为了统一UI与使用体验,使用开源库mobiscroll封装了一个自己的时间选择控件(mobiscroll库的使用文档不多,自己使用时也遇到很多坑),实现js比较简单,大家可以看看,然后定制出自己的时间选择器。
2016-04-03 15:05:00
17377
原创 PullToRefreshRecyclerView源码学习
PullToRefreshRecyclerView源码学习控件简介,PullToRefreshRecyclerView是实现了下拉刷新与上滑加载更多功能的RecyclerView,并且可自定义加载的view。
2016-04-03 14:40:28
3867
转载 完整版android视频播放器
可播放sdcard文件,3gp等手机支持格式。例如播放sdcard根目录下movie视频。final String strVideoPath = "/sdcard/movie.3gp";播放器,播放、暂停、快进退、声音音量控制、视频播放时间等常用控制都有,并且可双击全屏。完整版Demo地址:
2014-02-17 22:41:51
919
1
android自定义listview使用方法
2013-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人