自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 EventBus源码追踪

有过Android开发经验的人相信对EventBus应该都有所了解,EventBus是一个开源库,它使用观察者模式对模块间的通信进行解藕。下面是一个Android中使用EventBus的实例,相信大家都不陌生:class MainActivity : AppCompatActivity() { private val TAG = "MainActivity" overr...

2020-04-28 16:02:03 128 1

原创 Android常用APP夜间模式对比

在Android夜间模式原理一文中分析了Android实现夜间模式的原理,而且我们知道无论哪种实现方案都不是很完美。作为程序员我希望既能实夜间模式的平滑切换,又不用写那么多代码。所以我们可以看一下市面上用户量比较大的APP是如何实现夜间模式切换的,以便参考。当然我们看不到源码,只能从效果上去分析。下面我们一次分析:微信、QQ、微博、头条、百度、QQ浏览器、华为手机浏览器、京东这几个APP。微信:微信可以设置深色模式跟随系统,或者手动更改,当手动更改时需要重启APP才能生效,这样的话直接从根源

2021-03-08 21:05:22 2689

原创 Android夜间模式原理

先看一个设置夜间模式的demo。首先看MainActivity的代码:public class MainActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layo

2021-03-06 21:31:48 1332

原创 Android单元测试打怪升级——我为什么不写单测

作为一个工作五年的端程序员,我之前从未写过单元测试,我不知道有多少同学像我一样,也不知道大家不写单元测试的原因是什么。我以前没写过单元测试,所以在我刻板印象里认为写单元测试就是在浪费时间,我平时需求都做不完,哪有时间写单测啊!直到最近开发一个类似于广告的需求,逻辑如下:app启动以后会显示一条广告,用户可以点击广告查看详情,也可以点击关闭广告。如果当天关闭了一次广告,那么当天就不再展示广告了;如果累计关闭了3次广告,那么一周之内这个广告都不会再展示;如果用户连续三天没有点击“查看详情”,那么这个广告

2021-02-10 16:38:44 138 1

原创 一个开发者的全局思考

失败案例:我最近要开发一个需求,就是统一改一下UI标注,项目采用了组件化,标注是放在底层组件中的,供其他组件共用。需求开发前,我认为我要做的准备如下:1、UI要给我统一的标注;2、本需求涉及到多个组件库,所以我需要多个组件库的权限。准备工作做完之后我就开始开发了,开发过程比较简单,之后就是交付UI同学验收。此时我认为我的工作结束了,然而悲剧出现了。因为本需求的改动涉及到多个组件库的多个模块,所以在进行验收时就需要准备各个模块的数据,然而我只准备了自己模块的数据,其他模块由于没有跟其他开发者沟

2020-10-12 21:21:26 218 1

原创 你真的懂Android Handler吗?(三)

在你真的懂Android Handler吗?(一)和你真的懂Android Handler吗?(二)两篇文章中我们了解了Handler是如何跟线程绑定的,也知道了Handler中消息传递的机制是通过无限for循环。但是我们还遗留了一些问题,比如MessageQueue中的数据结构是怎样的?是一个先进先出的队列吗?在主线程中使用了无限for循环为什么没有引起ANR呢?这些问题需要我们通过分析Mess...

2020-04-26 16:42:17 130

原创 你真的懂Android Handler吗?(二)

2020-04-25 11:39:50 846

原创 你真的懂Android Handler吗?(一)

你真的懂Android的Handler机制吗?在回答这个问题之前先问自己几个问题:1、Hander时如何跟线程绑定的?2、Handler中的消息是怎么传递的?是通过回调还是通过循环?3、如果是通过循环传递的,那么为什么没有引起ANR?是不是在非UI线程中进行的无限循环?4、如果是在非UI线程中进行的无限循环,那么在UI线程发送消息并且在UI线程中处理消息时是否进行了线程切换?这样做...

2020-04-20 13:14:27 195

原创 崩溃记录:android.os.DeadSystemException

记录一个系统崩溃,如下图所示,这个崩溃全部出现在三星手机,而且操作系统版本为10,而且都是退到后台之后报的,我猜想应该是应用崩溃导致进程被杀了,然后再进行后续操作是出错了。具体原因还没找到。...

2020-02-08 20:50:22 15463 12

原创 剑指Offer5——二维数组中查找

在一个二维数组中,每一行都按照从左至右递增的顺序排序,每一列都按照从上至下递增的顺序排序。请写一个函数,输入这样一个数组和一个整数,判断整数是否存在于这个数组中。题目分析:假设有数组为{{1, 3, 5, 7, 9}, {2, 4, 6, 8, 10}, ...

2020-02-07 15:08:31 160 1

原创 剑指Offer题4 —— public static void main (String[] args) throws java.lang.Exception { int[不修改数组找出重复数字

在一个长度为n+1的数组中,所有数组中的数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但是不能修改输入的数组。例如输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},应该输出2或3。方案一:暴力解法将数组中的元素两两相比,最差情况时间复杂度是O(n²).方案二:使用Set创建一个大小为n的Set,每次向Set中插入一个数...

2020-02-07 13:51:48 1642

原创 每天一题:快速排序

private void quickSort(int[] nums, int start, int end) { if (nums == null || nums.length <= 1 || start >= end || start < 0 || start >= nums.length...

2020-01-09 15:22:07 173

翻译 Gradle使用 一 —— Gradle用户指南

原文链接:https://docs.gradle.org/current/userguide/userguide.html内容列表    Gradle简介    使用Gradle编译新项目    使用Gradle编译已存在的项目    获取帮助    许可Gradle简介    Gradle是一个开源的自动化编译工具,它灵活而且高效。Gradle编译脚本是使用Gro...

2018-07-27 16:58:46 276

原创 Gson使用指南

官方指南:https://github.com/google/gson/blob/master/UserGuide.md本文主要是官方指南的简化版翻译,并加入了自己的测试用例,如果有能力最好还是参考官方指南。Gson是什么?Gson是一个可以将Java对象序列化成JSON表示,也可以将JSON字符串转化成Java对象的Java库。Gson怎么用?Android项目要在Gradle中使用Gson,需...

2018-05-18 13:18:04 903

原创 使用Okio优化IO

仅以此文记录个人学习Okio的过程。先看先Okio的官方文档,这是Okio的github地址:https://github.com/square/okio官方的解释是这样的:Okio是一个库,是对java.io和java.nio的补充,通过这个库,我们可以更简单的使用和存储我们的数据。Okio提供了两种新的类型,这两种类型有很多新的功能,并且使用比较简单。这两中类型分别是:ByteString和B...

2018-04-26 11:08:28 2535

原创 Mac上安装Android Studio2.2.2

1、到官网上下载安装包(直接在百度上搜索AndroidStudio,进入其官网,不需要翻墙):http://www.android-studio.org/index.php/download    2、双击安装只要把Android Studio拖动到Application即可。下面才是重点3、打开Android Studio, 点击右下角的Configure,选择plugi

2017-02-07 17:29:30 3525 1

原创 在git上push代码时缺少Change-Id

今天在git上Push代码时遇到一个问题:missing Change-Id in commit message footer,如下图:解决办法就在图中:就是直接把上面划横线部分复制到下面,然后用git commit --amend重新提交一下即可。

2017-02-07 16:33:37 7191

原创 打开项目时Gradle:Resolve dependencies ':modules:XXXX'卡住

遇到一个问题——在有网情况下AndroidStudio打开项目时会在Gradle:Resolve dependencies ':modules:XXXX'这个地方卡住,在断网情况下编译正常解决办法如下:在Preferences里选中Offline work。但是当我这样操作之后,我再添加新的dependencies时,它是不会去自动下载的,而是会报错。这时我需要临时禁用offl

2017-02-03 11:28:42 3622

原创 TextView setCompoundDrawables不显示

记录一个bug:执行代码:Drawable openIcon = context.getResources().getDrawable(R.drawable.drip_mail_opened);holder.timeTv.setCompoundDrawables(openIcon, null, null, null);Icon不显示;修改如下:Drawable o

2017-01-17 18:57:12 650

原创 EditText单行显示

结论:要控制EditText单行显示需要同时设置android:singleLine="true"和android:maxLines="1";问题源:今天遇到一个bug,应用中使用了EditText并设置了android:maxLines="1",但是给该EditText赋值事发现他还是多行显示,于是又设置了android:singleLine="true",问题解决了。可是为什么呢?

2017-01-17 14:40:59 13864 1

原创 Android TextView 实现一个单词分两行显示

今天遇到一个需求,TextView实现自动换行时一个英文单词能够换行显示,使布局整齐。通过网上查询,确定实现逻辑如下:自定义TextView,重写其onMeasure方法,在测量textView的宽高时重新拆分字符串,实现单个单词换行显示,以下是自定义TextView的源码(基本复制博客:http://www.cnblogs.com/snser/p/5159125.html中的源码):pack

2017-01-16 11:54:33 11531 2

原创 Android Studio倒入工程错误记录

1、gradle版本太低,如果倒入的工程依赖的版本较高,AndroidStudio就会自动下载并升级Gradle,由于AndroidStudio下载很慢,所以最好自己手动下载,具体步骤见http://blog.csdn.net/zhang_ying_xian/article/details/51096487,感谢楼主。2、Could not resolve org.slf4j:sl

2016-12-05 10:47:38 3128

原创 Exception记录:com.android.ide.common.process.ProcessException

AndroidStudio编译错误:Error:Execution failed for task ':estateAndroid:processDebugResources'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'co

2016-11-22 16:50:38 341

原创 一张图看懂Touch事件的传递

Touch事件的传递

2016-10-12 14:28:05 2579

空空如也

空空如也

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

TA关注的人

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