自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是MD5

什么是MD5?一、概念MD5在软件行业是再常见不过的一个词了,即使你从没使用过它,也不知道它到底是个什么东西,但你肯定听过这个词。那么到底什么是MD5呢?是加密算法吗?不是的,它是一种信息摘要算法,它可以从一个字符串或一个文件中按照一定的规则生成一个特殊的字符串(这个特殊的字符串就被称之为摘要,我理解就是从文件中摘一些信息片段加工而来),并且一个文件所对应的MD5摘要是固定的,当文...

2018-08-05 13:42:42 8133 4

原创 签名apk安装失败,都是signature version惹的祸

签名apk安装失败,都是signature version惹的祸新建的一个项目由于引用了一些三方库,还没打过签名包,担心混淆会有问题,准备先打个签名包试一下,结果一打出来就遇到个很让人郁闷的问题:安装失败!!!一开始我以为是混淆的问题,因为在打包过程中还遇到过几个错误和警告,所以重点都放在了这几个问题上,以为自己排除这些错误和警告的方法不对,导致虽然能打包成功但无法安装。折腾了好久也没有弄好。后来想

2018-05-05 13:45:16 8015 3

原创 Java线程池中的核心线程是如何被重复利用的?

Java线程池中的核心线程是如何被重复利用的?引言在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。此时,我们很自然会想到使用线程池来解决这个问题。使用线程池的好处:降低资源消耗。java中所有的池化技术都有一个好处,就是通过复用

2018-03-15 17:44:07 9439 55

原创 cmake使用独立工具链交叉编译可在android中运行的so包

cmake使用独立工具链交叉编译可在android中运行的so包在在命令行下用CMake交叉编译可在android中运行的so包一文中说了一下使用NDK自带的工具链来编译so包,当时讲到还有另一种方法来编译so包,即使用独立工具链来编译,现在就来讲一讲这种方式。主要包含以下两个步骤:编译独立工具链使用独立工具链编译so包一、编译独立工具链编译独立工具链是利用$NDK/tool

2018-01-08 10:40:11 10272 4

原创 一个自定义滑动验证组件

一个自定义滑动验证组件前段时间项目要求登录的时候加个滑动验证的功能。效果如下:乍一看,还真不知道怎么下手,后来想了想之前做过一个左滑删除的控件源码在这里觉得可以将这个改一下拿来用,只是换个滑动方向,估计成功概率比较大。接着就把以前的代码翻出来,看看怎么改,虽然修改过程中遇到些问题,但最终还是达到了想要的效果。下面说说实现的原理:实现过程中借助了ViewDragHelper这个类来简化代码,ViewDragHelper的用法可以参考这篇文章。实现原理是这样的,用一个水平方向的LinearLay

2020-06-27 15:41:50 525

原创 Activity的启动模式及应用场景

Activity的启动模式及应用场景Activity的启动模式如今说起来似乎是个古老的话题,可又不得不承认它是个很重要的内容,从android诞生到现在,这些启动模式一直在发挥着作用,只不过不容易被人感觉到它们的存在。我们随手敲下一行startActivity代码就伴随着一个启动该activity的启动模式。这些启动模式将会影响到应用的返回行为。从A启动B,再按back键,会返回到A吗?不一定。为什么呢?请往下看。关于task在介绍启动模式之前有必要先介绍一下android中Task的概念,因为它与a

2020-06-15 00:05:00 936

原创 怀念母亲

怀念母亲今天是母亲节,在手机上看到很多人都发出了对母亲的祝福,勾起了我对母亲的思念。又恰好是周末,就临时决定敲下几行文字,以弥补越来越模糊的记忆。母亲去世两年多了,她这一生用了一个大大的悲剧来结束(因精神问题导致跳楼自尽,享年才六十出头),令我们全家都感到十分悲痛,也十分意外(之前她从来没有精神方面有问题的症状)。在接到弟弟来电的那一刻起,我的心情跌落到了谷底,自责、怨人、怪命…在候车室呆呆地盯着来往的人流,强忍着不要哭出来。一到家,见到爸爸的那一刻,再也忍不住了,抱着爸爸嚎啕大哭起来,悲伤的洪流像开了

2020-05-10 19:21:33 498

原创 第5讲 深入理解 ClassLoader 的加载机制

第05讲 深入理解 ClassLoader 的加载机制拉勾教育:https://kaiwu.lagou.com/course/courseInfo.htm这一讲主要讲了class文件的加载时机,及加载class的双亲委派机制。还举例说明了如何自定义classLoader。最后还介绍了android中的类加载器,并举例使用自定义的类加载器进行热修复。下面来一一看一下这些内容。一、class文件...

2020-05-04 10:38:25 810

原创 第4讲 编译插桩操纵字节码

##第4讲 编译插桩操纵字节码拉勾教育:https://kaiwu.lagou.com/course/courseInfo.htm这一讲的内容对我来说挺新鲜的,编译插桩只听过这个词,并一直认为是一项高不可及的黑科技,看完这节课,感觉还是没那么可怕的。这节课举了一个例子手把手地说明了怎么实现编译插桩。这里记录一下思路,具体代码看课程。0、需求先说一下需求,不然说了半天都不知道用这个插桩来干什...

2020-05-02 17:37:49 394

原创 第3讲 字节码层面分析 class 类文件结构

第3讲 字节码层面分析 class 类文件结构拉勾教育:https://kaiwu.lagou.com/course/courseInfo.htm这一讲主要介绍class文件的内部结构,内容相对枯燥但并不难。据说这个东西很重要,不过就目前我所涉及的知识面来讲,在实际应用中不大可能会去通过分析class文件来理解一个类的作用,或者进一步去修改class文件。即使要操作class文件也会有工具去处...

2020-05-01 17:31:53 317

原创 第2讲 GC回收机制与分代回收策略

第2讲 GC回收机制与分代回收策略拉勾教育:https://kaiwu.lagou.com/course/courseInfo.htm说到垃圾回收,首先要知道什么是“垃圾”,垃圾就是没有用的对象,那么怎样判定一个对象是不是垃圾(能不能被回收)?Java 虚拟机中使用一种叫作***可达性分析***的算法来决定对象是否可以被回收。一、可达性分析可达性分析就通过一组名为”GC Root"的对象作...

2020-04-18 15:03:09 562

原创 学习笔记 第1讲 程序运行时内存到底是如何进行分配的

第01讲:程序运行时,内存到底是如何进行分配的?拉勾教育:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1855这一讲详细介绍了jvm运行时的内存如何分布的,并举例说明了程序的运行过程。一、JVM运行时内存数据区先看一下这张图:从这张图中可以看出,根据数据能否被线程共享,可分为线程共享数据...

2020-04-06 22:13:47 441

原创 android studio 3.6 新特性

android studio 3.6 新特性android studio 3.6 稳定版已经在2月份就发布了,一直也没去看看,这两天决定看一下,老是提示我更新。新特性还是很多的,这里把自己感兴趣的几点记下来。完整的请看官方文档:https://developer.android.com/studio/releases0、gradle 离线模式设置当我一打开studio 3.6的时候,首先就是...

2020-03-29 08:28:34 767

原创 android自定义drawable的state属性

android自定义drawable的state属性在drawable中使用selector在开发中太常用了,不过用的最多是根据系统提供的一些状态来选择图片,比如:android:state_checked、android:state_pressed等等,其实这些状态也是可以自定义的,比方说天气状况有很多种情况,天晴、多云、下雨等等,那能不能根据这些状况来显示不同的示意图呢?这里是指通过 sel...

2020-03-20 08:04:38 1639

原创 Android多渠道打包配置

Android多渠道打包配置之前为了在同一台手机能同时安装测试包和生产包,采用配置buildType的方式来实现,相比于flavor,感觉是挺轻量又恰到好处的配置,具体见通过配置applicationId来实现测试包和生产包安装在同一台手机上。最近因为业务需要,需要多个渠道的包了,这就必须要用到flavor这个大杀器了。一路配置下来,感觉还挺顺,下面就具体记录一下。###目标先说一下需求,增...

2019-12-15 11:22:53 1151

原创 java中的反射使用

java反射的用法对于众多java应用程序员来说,java反射也许是个即熟悉又陌生的东西,说熟悉是经常会听到“反射”这个字眼,说陌生是因为写应用程序并不怎么直接跟反射打交道,更多地用到反射技术的往往是一些稍底层一点的东西,像一些框架之类的。那么什么是反射呢?一、定义先来看看官方的说法Reflection is commonly used by programs which require...

2019-06-22 16:51:09 224

原创 使用gson将null String对象转换成空白字符串

使用gson将null String对象转换成空白字符串在app开发中,页面上可能会有‘null’字眼出现,如,姓名:null这是因为后端返回的json数据相应字段的值为null造成的,如:{ "name": null, "phone": "13800138000"}将null显示在界面上给用户带来很不好的体验,当遇到这种问题时,最简单的方法就是显示前先判一下,可是要每个字...

2019-06-07 14:53:39 4989

原创 自定义可设置MaxHeight的RecyclerView

自定义可设置MaxHeight的RecyclerView引言在实际工作中,可能会遇到这样一种需求,在一个列表下面紧跟一个按钮,就像垂直的LinearLayout中,先是一个RecyclerView然后跟着一个button,但是这样布局会有一个问题,当RecyclerView的内容超过一屏时,这个button就被移到屏幕外了,看不见了。如果用相对布局呢,把button定在底部,这也显然不是那么完...

2019-05-02 15:25:51 3270

原创 通过配置applicationId来实现测试包和生产包安装在同一台手机上

通过配置applicationId来实现测试包和生产包安装在同一台手机上概述开发人员或者测试人员经常需要将测试的内容与生产上的内容对比,用于做一些确认,可是通常情况下在一部手机上不能同时安装测试包与生产包,因为它们的application id 都是一样的,这是android系统的规定。为了达到这个目的,可以通过应用gradle灵活的配置方式来实现,通常有两种实现方式:1、多渠道打包通过P...

2019-03-24 18:58:11 1169

原创 底部弹框动画及渐变背景色

Android底部弹框动画及渐变背景色概述手机应用中的底部弹框经常都会用到,应该说也比较容易实现,网上有非常多的例子,不过都是视觉效果比较单一的,比如瞬间弹出、从底部慢慢升起、带半透明的背景色。如果把这些效果组合起来实现就会有些瑕疵,等下我会具体说一下我认为的瑕疵。现在来说一下实现以上几种效果的常见方法:一、 动画效果实现方法对于PopupWindow的动画效果,一种是用style, 一种...

2019-03-17 20:10:02 856

原创 Android EditText 输入金额保留小数点后2位

Android EditText 输入金额保留小数点后2位开发中经常会遇到要让用户输入金额的情况,并且还可能有些其它的要求,比如小数点后不能多于2位,最大金额不能超过某个值等等,一开始遇到这种需求时会觉得这个似乎挺简单的,但写代码的时候却发现要写好也不容易,索性写了个工具,以后要用到的时候就直接用了。多的不说了,直接上代码:/** * 输入金额时的文本过虑器,可设置最大输入金额、小数点后位...

2019-01-06 17:46:18 2391

原创 Android APP自动升级安装失败

##Android APP自动升级安装失败###概述自动升级在APP中是一个非常常见的功能,当你的应用有更新时,可以提醒用户升级甚至在必要时可强制用户升级。但随着系统版本的更新,安装apk的权限也在收紧,导致一些APP在高版本的机器上升级失败。这时就有必要了解一下如何处理这样的问题了。###权限机制在Android7.0的发布介绍中提到了一些文件系统权限方面的修改。官网:https://d...

2018-09-24 17:32:45 6051 5

原创 通过JitPack发布Android Library

通过JitPack发布Android Library烦恼相信大家在刚接触Gradle的时候都被其使用依赖库的方式折磨过,在Gradle中配置依赖库确实非常简单,可是一旦出了什么问题就会很懵逼。明明是按人家的开发文档进行配置的,却老是报错,这时候如果对Gradle的依赖机制不够了解的话就不知道该怎么去处理了,能不能依赖成功全看老天的心情了。对于一个不怎么有追求的程序猿来说,一定会想去探个...

2018-06-04 01:12:02 610

原创 Android Studio中多moudle依赖aar的配置

Android Studio中多moudle依赖本地aar文件的配置在Android开发中,我们有时会引入其他第三方的库或者资源等,可能是添加一个jar文件,也可能是添加一个aar文件,又由于aar可以包含资源文件,所以android库通常会打成aar格式的文件,在工程中引用的时候通常有两种方式,一种是引用Maven库中的aar,一种是将aar拷下来,放在libs文件夹下。引用Maven库中的...

2018-05-27 11:45:11 1657

原创 结合源码说说使用Handler发送异步消息的实现过程

结合源码说说使用Handler发送异步消息的实现过程在Android开发中,我们经常会遇到这样一种情况:如果在UI界面上执行一段很耗时的代码,比如我们在界面上点击了一个“下载”按钮,那么我们需要执行网络请求,此时如果下载量大,或网络比较差,很容易就会造成ANR(Application Not Responding)错误,为了保证不影响UI线程,我们通常会创建一个新的线程去执行我们的耗时的代码。当我们

2018-02-11 17:01:28 585

原创 Android录屏并利用FFmpeg转换成gif(四) 将mp4文件转换成gif文件

Android录屏并利用FFmpeg转换成gif(四)写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方式还是比较困难的。本来我以为应该也有能直接在手机上录屏并生成gif文件这样的app,下载一个这样的APP来录gif要方便得多。结果发现目前几乎没有此类APP,我就想能不能自己写一个,然后查了查资料,

2018-01-28 14:24:39 1536 2

原创 Android录屏并利用FFmpeg转换成gif(三) 在Android中使用ffmpeg命令

Android录屏并利用FFmpeg转换成gif(三)写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方式还是比较困难的。本来我以为应该也有能直接在手机上录屏并生成gif文件这样的app,下载一个这样的APP来录gif要方便得多。结果发现目前几乎没有此类APP,我就想能不能自己写一个,然后查了查资料,

2018-01-28 14:23:00 1110 1

原创 Android录屏并利用FFmpeg转换成gif(二)交叉编译FFmpeg源码

Android录屏并利用FFmpeg转换成gif(二)写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方式还是比较困难的。本来我以为应该也有能直接在手机上录屏并生成gif文件这样的app,下载一个这样的APP来录gif要方便得多。结果发现目前几乎没有此类APP,我就想能不能自己写一个,然后查了查资料,

2018-01-20 10:45:17 1408 2

原创 Android录屏并利用FFmpeg转换成gif(一)录屏

Android录屏并利用FFmpeg转换成gif(一) 录屏写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲这种方式还是比较困难的。本来我以为应该也有能直接在手机上录屏并生成gif文件这样的app,下载一个这样的APP来录gif要方便得多。结果发现目前几乎没有此类APP,我就想能不能自己写一个,然后查了查

2018-01-13 12:28:53 1764

原创 在命令行下用cmake交叉编译可在android中运行的so包

在命令行下用CMake交叉编译可在android中运行的so包最近在写一个通过录屏生成gif的小应用,由于要用到NDK,所以开始去解这方面的知识,总的来讲也还算简单,不过对于之前从没接触过ndk的小白来说,一切都是需要摸索的,在一个不熟悉的领域有时候一个微小的问题也能让你摸个半天才能搞明白。我写博客的大部分原因就是为了记录下这些摸索的过程,以后要是忘记了还可以翻出来看,当然,要是还能帮到其他跟我一样

2017-12-30 19:08:19 8491

原创 给我一岁的儿子写的小游戏

给我一岁的儿子写的小游戏一岁左右的小孩好奇心很强,我在一旁玩手机时我儿子总是要凑过来看一看,看到屏幕上的东西就喜欢去摸一摸,特别是运动的东西更能吸引他的注意。我就突然想到写个小游戏给他玩玩吧。然后就写了一个,不过他并不买账,只玩了一会儿就不玩了。可能是俺的游戏不太符合他的需求吧,嘿嘿。。虽然这游戏没啥用,但从写程序的角度来说也积累了一点点经验,所以在这里记录一下。说是游戏,其实就是个非常简单的小应用

2017-11-04 20:46:51 325

原创 巧用ViewPager实现日历场景

巧用ViewPager实现日历场景在 android中用ViewPager实现循环滑动 一文的结尾我们曾留了个小问题: 提个小问题:如果换一个场景,比如在日历中,我们每滑一下就显示下一个月或上一个月的日历,一般做个日历的话都要可以查询上百年的日期吧,如果使用上述方法,难道我们要传N多个view到ViewPagerAdapter里面吗?显然这是不可能的。如果只用三个view呢,让它们循环使用,这也

2017-10-28 15:10:37 1820

原创 ViewPager实现循环滑动

android中用ViewPager实现循环滑动ViewPager在android开发中是个非常常用的组件,最为大家所熟悉的应用场景大概是在app中自动滚动的广告了。当然了,还有很多其它的地方也会用它来实现。不过美中不足的是,它没提供相应的API来实现循环滑动,当滑到最后一页后就不能前进了,只能回退,而当退到第一页时也不能再回退了。可我们的需求中往往有些地方需要循环的效果,比如上面说的广告,一般都是

2017-10-22 11:55:21 883

原创 Android6.0权限申请示例

Android6.0权限申请示例从Android6.0开始,系统在权限上做了大幅度的改变,6.0之前只要在AndroidManifest.xml文件中声明使用相关的权限就可以了,在安装的时候将会提示用户授权,如果用户不授权就无法安装。6.0之后则不同,安装apk时不会提示用户授权,而是将所有权限都默认为拒绝,只有要应用到某项权限时,才会询问用户是否授权。此时如果我们的老代码不做任何变动的话App就会

2017-10-15 17:57:54 379

空空如也

空空如也

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

TA关注的人

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