- 博客(100)
- 资源 (17)
- 收藏
- 关注
原创 HandlerThread存在的真正意义:一个线程执行多个线程的任务!
前言:要了解HandlerThread首先我们必须了解Handler消息机制,简单回顾一下Handler机制。大家都知道Handler是通过发送Messege到一个消息队列,然后通过Looper轮询器来取出消息然后处理。处理的方法就是handlerMessegeXXX(方法名大概就是这个)。那么这个处理方法执行的线程取决于什么呢?就是取决于Looper轮询器所在的线程。本文不仅仅是教你如何使用...
2019-12-20 16:02:20
920
原创 在WebView中对第三方H5页面的文本密码框添加自定义随机键盘
前言:首先介绍一下这个需求的背景,由于公司是涉及到金融行业的需要与银行对接资金存管。出于保密性这里不直接列出公司名字和银行名字。从2018年国家对金融行业大整改以来,为了能够顺利通过备案,我们也跟着政府的脚步一步一步走向合规。好了,大致就是因为要通过备案,必须把这个需求实现,否则将不会通过。需求内容就是,当客户端有关资金交易的时候,会通过加密数据以及秘钥的方式把第三方银行的页面(充值、...
2019-08-15 11:01:18
1424
1
原创 记录防止遗忘系列(git的操作使用)
前言因为有时候很久没用git提交代码,一些简单操作都忘记了,写下这篇文章是为了日后来返回来找回记忆。我统计的操作大概分为以下几个步骤:1.下载相关工具安装,这些就不讲了。2.使用命令在你要提交的项目中创建仓库,创建仓库之前可以先建立一个README文件,这个文件很重要,可以在你的项目底下展示你想要展示的任何信息,包括文字描述,图片,gif等下文会提到://把这个标题添加...
2018-10-24 15:57:22
369
原创 用WindowManager实现一个类似ios悬浮可拖动的虚拟导航按钮
前言:实现这个功能,可能需要你对WindowManager有一定认识,大家可以自行去看大佬们关于WindowManager的文章。需要基本的自定义View相关的知识以及onTouch相关参数的理解。开始操作:既然是用WindowManager,当然开始是初始化咯:这里比较重要是用WindowManager的add方法,添加了一个View在最顶层,这样这个View就类似悬浮在
2018-01-23 14:24:02
1618
原创 程序员的迷茫与中年危机
感悟:最近自我感觉状态直线下滑。无论是身体状态、精神状态都感觉大不如以前。也许是从事了这样一份工作,业余爱好和时间都比较匮乏。时间匮乏主要是工作上面问题比较的多恰巧导致了没有时间去发展业余爱好。刚毕业的那段时间,还是比较有激情的,对任何新鲜的事物都感兴趣都想去尝试。一直想着要学习吉他、街舞等这些在大学期间没有认真去学习的爱好,但是随着入职时间的推移,似乎这些爱好也变得谈了。大概从去年开
2018-01-16 09:46:42
1440
2
原创 关于Android自动化测试Monkey和MonkeyRunner不能正常运行的说明
前言:哈喽,感谢一直关注和支持我的人,好久没更新博客了,今天逛了一下发现多了很多关注。所以写篇博客压(填)压(下)惊(坑)!前段时间看了一本腾讯出的自动化测试Android的书籍,至于为什么会看书,因为最近穷。古人云:“书中自有黄金屋”。看完后还是穷,不知道是不是看的方式不对,并没有发现黄金。[/苦笑]既然看了书,今天就来说说和书上无关的东西吧!以前很少关注测试这一块,最多也就
2017-06-27 16:57:37
5908
16
原创 Android中HttpClient请求https的验证过程
前言:好久没更新了,最近遇到一些很心烦的事情,既然心烦索性在这里就不提了。HttpClient请求https应该加的一些处理:1.在你的包里面添加一个类:package com.xxx.x.common;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostExcep
2017-01-16 15:31:00
2456
原创 微信小程序公测正式开放
前言:当张小龙公开宣布微信小程序即将到来时,又掀起了一波移动互联网的高潮。终于微信小程序公测正式开放,相信大家也迫不及待想要参与其中吧!不过目前好像暂时不支持个人开发者申请,只能企业去申请公测资格。
2016-11-07 15:01:40
1867
原创 Android应用集成微信、支付宝支付
前言:现如今第三方支付已经是横行天下,Apple Pay,三星pay,支付宝,微信....等等,在他们互相争夺市场的时候,当然方便的是我们普通老百姓!
2016-11-07 14:32:29
1865
原创 Linux命令大全
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpui
2016-09-02 10:27:51
3389
原创 Android 7 强势来袭开发者们不得不知道的细节
前言:作为开发者,关注新技术是必要的;作为Android开发者关注Google发布的更新是必须的!今天我们来了解下前段时间已经发布的Android 7的一些新的特性,当然既然已经发布,那么也就是说我们应该尽快让我们的应用支持Android 7的新特性,让我们来看看Android 7有哪些值得关注的点吧!Google发现,在多任务列表里,99%的人只会关注最近七个,所以Android N
2016-08-23 11:33:48
11881
原创 应用跳转(Deep Link)
前言:接触到这个是因为项目需求。产品给的需求是这样的:在微信或者任何分享的链接中,打开我们自己app的任何一个页面。如果没安装就引导到应用市场或者appstore去安装,安装完打开应用再跳到指定页面。分析:首先我们讨论了一番觉得可以做,当时是假设用户已经安装了我们的app。但是当用户没安装我们的app,那么此时app下载安装的来源是第三方的市场(这里假设是应用宝),那么应用宝安装完
2016-08-16 15:53:53
23097
原创 Android订单倒计时的简单实现
前言:在正式的开发中很多情况需要倒计时,但是有些写在本地的倒计时,容易出现用户更改手机时间,倒计时就不那么精准了。所以我们需要获取到的是服务器的时间来执行倒计时。1.思路>请求服务器接口,获取服务器返回的一个时间。>执行倒计时>这里假设时间是秒,那么换算成xx分钟xx秒,显示到控件2.简单实现由于代码比较简单,就直接上代码:class TimeC
2016-08-11 13:49:51
8090
原创 BAT的android应用会用到的第三方框架
前言:在开发一个应用开始我们最先考虑的就是选择哪些第三方的框架,这里列出BAT这种千万用户量级别的应用,使用到的第三方框架。有人会好奇我是怎么知道的,其实你反编译后就知道了!1.Android Design Support Library这个并不是一个第三方库,是谷歌官方出的支持库。之所以列出来除了上面说的这个APP有使用到它外,更多的是因为这个库很强大~这个库和githu
2016-08-04 14:19:54
6283
原创 Android 5+ 通知栏的细节问题
Android从5.0系统开始,对于通知栏图标的设计进行了修改。现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来进行绘制,而不应该包括RGB图层。就是让我们的通知栏图标不要带颜色就可以了。让设计给我们切图,并且告诉他们图片的要求,因为他们通常并不知道Google的各种标准和要求。那么我们来模仿一下支付宝的通知栏图标:当我们targetSdkVersion指
2016-08-03 17:11:00
4952
原创 Android开发者模式选项中,那些选项的意义
前言:Android开发者选项,看起来很简单的事情,其实很多同学对它了解得不够,Google用心良苦得为我们设计了这么多小开关都是有它的作用的,今天也花了点时间,过了一遍全部的30多个开关,从中整理出15个对日常Android开发比较有帮助的选项。需要指出的是,不同的ROM对开发者选项的支持不一样,精简掉一些很正常,我下面提到的都是官方支持的功能,当然不同的官方版本支持程度也不一样,你
2016-08-03 15:55:30
9017
原创 Android中Dialog、Toast和Snackbar使用场景以及技巧
前言:Dialog和Toast用的太频繁了,但是Snackbar是Design Support库中提供的新控件,可能对于一些比较早写Android的大神来说,用的相对较少,因为可能老Android程序员看到一个Snackbar直接就用dialog或者Toast来写出来了。这三个控件虽然部分功能都是提醒用户,但是他们出现的场景与时机可能会严重影响到用户体验。我们来简单描述一下:1.Dialo
2016-08-03 11:02:13
6760
原创 AndroidStudio提升打包的效率
前言:AndroidStudio的代码结构和eclipse不同,它可以提供单工程多module的形式。虽然这种方式对于一些场景来说很方便编码,但多建立一个module就需要多维护一个module。所以如果仅仅是为了方便写代码而建立一个module是会降低应用打包速度的,一些简单的结构就没比较建立一个module。这个项目中的module有很多,所以gradle在编译的时候会去检测m
2016-08-01 15:47:41
10408
原创 浅谈Android热修复
前言:很多时候测试完的产品上线后,突然发现一个小的bug。这时候考虑到用户体验、和时间成本,不能为了一点点bug而重新发布新版本。于是就有了热修复这个概念的产生!它可以在不发布版本的情况下修复出bug的代码。我们来一探究竟。目前可能用的相对广泛的热修复框架有如下几个:https://github.com/dodola/HotFixhttps://github.com/jasonro
2016-07-28 10:13:19
17020
原创 在AndroidStudio中集成Genymotion模拟器
为什么要给大家分享这篇文章呢?自带的模拟器就不吐槽了,Genymotion完胜自带的模拟器。步骤:1.打开设置:File-->Setting,或者默认快捷方式ctrl + alt + s(如果你登陆)了QQ,那么是不是神奇的打开了QQ的消息盒子。只要把QQ消息盒子快捷键删除就可以了。2.打开的settings界面里找到plugins设置项,点击右侧的“Browser rep
2016-07-27 16:14:29
8139
原创 java.lang.IllegalArgumentException - not attached to window manager
前言:做安卓的苦逼就是,公司的测试机测试完了都没问题,用户的奇葩机器出现 各种问题!最近新版本更新的头一天,就在友盟上发现出现的如题的错误信息,而且是一片。但是看机型好像大部分都是比较老的手机。为什么会报View not attached to window manager错误?这个错误的意思是说我们所操作的View没有被纳入window manager
2016-07-27 14:10:41
5966
原创 如此火爆的VR到底是什么
前言:VR相信大家都有所耳闻,现在如此火爆,而且涉及的邻域也很广泛。如此火爆肯定有很多人就会想着学习如何开发VR!VR(Virtual Reality)虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。VR是一套欺骗人类大脑和感知的系统,比如当你带上VR眼镜后
2016-07-25 13:33:05
5002
原创 RxJava + Retrofit让Android网络请求简单效率
前言:Retrofit前面有篇特别讲解了:浅谈Android网络封装框架Retrofit 这里就不做过多的介绍了!Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API。下面我用对比的方式来介绍 Retrofit 的 RxJava 版 API 和传统版本的区别。以获取一个 User 对象的接口作为例子
2016-07-13 16:45:17
8799
原创 深入浅出RxJava就这一篇就够了
前言:第一次接触RxJava是在前不久,一个新Android项目的启动,在评估时选择了RxJava。RxJava是一个基于事件订阅的异步执行的一个类库。听起来有点复杂,其实是要你使用过一次,就会大概明白它是怎么回事了!为是什么一个Android项目启动会联系到RxJava呢?因为在RxJava使用起来得到广泛的认可,又是基于Java语言的。自然会有善于组织和总结的开发者联想到Android!没
2016-07-13 16:29:41
50044
3
原创 C语言入门(二十五)文件操作
文件操作 一、标准文件的读写1.文件的打开fopen()文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了。当使用打开函数时,必须给出文件名、文件操作方式(读、写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头。若已有一个
2016-07-12 17:36:47
9233
1
原创 C语言入门(二十四)文件操作基本常识
文件操作基本常识 前言:由于程序中经常有大量对文件的输入输出操作,它经常构成了程序的主要部分,因而C语言提供了很多输入输出的函数,它们分别用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件(也称非标准文件(流)输入输出(I/O)系统)。我们已经熟悉了通过键盘和显示器进行输入输出的一些函
2016-07-12 17:25:11
7367
原创 C语言入门(二十三)位操作
位操作 前言:在第一节概述里就说了,C语言是一种中级语言,能对计算机硬件直接操作,这就涉及到位的概念。一、位的概念我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255,也即00000000-11111111。位就是里面的0和1。char c=100;实际上c应该是01100100,正好是64H。其中高位在前,低位在后
2016-07-12 17:18:28
1948
原创 C语言入门(二十二)堆和链表
堆和链表 我们经常在题目中有要求,输入一个整数,然后以这个整数作为数组的元素个数,下面的程序代码是错误的。int n,array[n];scanf(%d,&n);在Turbo C中,不允许出现动态数组。那么如果必须需要这样时,就只能使用链表了。一、堆堆是一种动态存储结构,实际上就是数据段中的自由存储区,它是C语言中使用的一种名称,常常用于动态数据的存储分配。堆中
2016-07-12 17:14:31
7813
原创 C语言入门(二十一)联合和枚举
联合和枚举 联合(union):一、联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。联合说明和联合变量定义与结构十分相似。其形式为:union 联合名{ 数据类型 成员名; 数据类型 成员名; ... }联合变量名; 联合表示几个变量公用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。 下例表示说明一个联
2016-07-12 17:09:12
7148
原创 C语言入门(二十)结构体
结构体 前言:结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。一、结构说明和结构变量定义在Turbo C中,结构也是一种数据类型,可以使用结构变量,因此,象其它类型的变量一样, 在使用结构变量时要先对其定义。定义结构变量的一般格式为: struct 结构名{ 类型 变量名;类型 变量名;...} 结
2016-07-12 17:03:38
9422
原创 C语言入门(十九)指针函数和函数指针
指针函数和函数指针 一、指针函数当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。格式:类型说明符 * 函数名(参数)当然了,由于返回的是一个地址,所以类型说明符一般都是int。例如:int *GetDate();int * aaa(int,int);函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。
2016-07-12 14:47:50
6933
原创 C语言入门(十八)数组和指针
数组和指针 前言:指针和数组有着密切的关系,任何能由数组下标完成的操作也都可用指针来实现,但程序中使用指针可使代码更紧凑、更灵活。一、指向数组元素的指针我们定义一个整型数组和一个指向整型的指针变量:int a[10], *p; 和前面介绍过的方法相同,可以使整型指针p指向数组中任何一个元素,假定给出赋值运算p=&a[0]; 此时,p指向数组中的第0号元素,即a[0]
2016-07-12 14:41:54
7191
原创 C语言入门(十七)指针概念
指针概念 前言:学习Turbo C语言,如果你不能用指针编写有效、正确和灵活的程序,可以认为你没有学好C语言。指针、地址、数组及其相互关系是C语言中最有特色的部分。规范地使用指针,可以使程序达到简单明了,因此,我们不但要学会如何正确地使用指针,而且要学会在各种情况下正确地使用指针变量。一、指针基本概念及其指针变量的定义我们知道变量在计算机内是占有一块存贮区域的,变量的值就存
2016-07-12 14:37:25
6977
原创 C语言入门(十六)预处理过程
预处理过程 前言:预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码
2016-07-12 14:16:56
7823
原创 C语言入门(十五)函数递归
函数递归 一、栈在说函数递归的时候,顺便说一下栈的概念。栈是一个后进先出的压入(push)和弹出(pop)式数据结构。在程序运行时,系统每次向栈中压入一个对象,然后栈指针向下移动一个位置。当系统从栈中弹出一个对象时,最近进栈的对象将被弹出。然后栈指针向上移动一个位置。程序员经常利用栈这种数据结构来处理那些最适合用后进先出逻辑来描述的编程问题。这里讨论的程序中的栈在每个程序中都是存在
2016-07-12 14:05:17
6990
原创 C语言入门(十四)变量的作用域和存储类型
变量的作用域和存储类型一、作用域和生存期C程序的标识符作用域有三种:局部、全局、文件。标识符的作用域决定了程序中的哪些语句可以使用它,换句话说,就是标识符在程序其他部分的可见性。通常,标识符的作用域都是通过它在程序中的位置隐式说明的。1.局部作用域前面各个例子中的变量都是局部作用域,他们都是声明在函数内部,无法被其他函数的代码所访问。函数的形式参数的作用域也是局部的,它们的作用
2016-07-12 13:59:44
6984
1
原创 C语言入门(十三)函数参数的传递和值返回
函数参数的传递和值返回 前言:前面我们说的都是无参数无返回值的函数,实际程序中,我们经常使用到带参数有返回值的函数。一、函数参数传递1.形式参数和实际参数函数的调用值把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的参数叫实际参数。在函数调用之前,实际参数的值将被拷贝到这些形式参数中。2.参数传递先看一个例子:void
2016-07-12 13:47:44
3226
1
原创 C语言入门(十二)函数的定义和调用
函数的定义和调用 前言:本节介绍C程序的基本单元--函数。函数中包含了程序的可执行代码。每个C程序的入口和出口都位于函数main()之中。main()函数可以调用其他函数,这些函数执行完毕后程序的控制又返回到main()函数中,main()函数不能被别的函数所调用。通常我们把这些被调用的函数称为下层(lower-level)函数。函数调用发生时,立即执行被调用的函数,而调用者则进入
2016-07-12 11:13:29
9040
原创 C语言入门(十一)多维数组
多维数组一、高维数组有时,数组的维数并不止一维,例如一个记录消费中心在第一季度里各个月的收入数据就可以用二维数组来表示。定义二维数组的方法是在一维数组定义的后面再加上一个用方括号括起来的维数说明。例如:float array[3][8];实际上,这个数组可以看成3个连续的一维数组,每个一维数组具有8个元素。该数组在内存中的存储格式为最左边的维数相同的元素连续存储,也即按行存储的
2016-07-12 11:05:31
6884
2
原创 C语言入门(十)数组
数组 前言:数组,顾名思义就是一组同类型的数。一、数组的声明声明数组的语法为在数组名后加上用方括号括起来的维数说明。本接仅介绍一维数组。下面是一个整型数组的例子:int array[10];这条语句定义了一个具有10个整型元素的名为array的数组。这些整数在内存中是连续存储的。数组的大小等于每个元素的大小乘上数组元素的个数。方括号中的维数表达式可以包含运算符,但其
2016-07-12 10:54:57
7230
2
React Native开发指南
2016-10-25
Android自定义选择相册图片并带自定义裁剪、旋转
2016-06-03
Android线程的销毁
2014-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人