- 博客(52)
- 收藏
- 关注
原创 Android USB 串口开发文档说明
一、前言:Android USB有两种模式Host Mode和Accessory Mode:1)Host Mode:Android手机作为主设备,如通过OTG线连接的HID设备或者U盘为从设备;2)Accessory Mode:Android手机作为从设备,如通过USB数据线连接的电脑为主设备。下面主要介绍Host Mode。(官方文档:https://developer.android....
2018-11-28 18:33:26
1000
原创 Android Camera2 开发文档说明
参考:Camera v2文档1:https://www.jianshu.com/p/73fed068a795Camera v2文档2:https://blog.youkuaiyun.com/qq_38106356/article/details/77996319github参考代码:https://github.com/googlesamples/android-Camera2Basic参数调节关键字...
2018-11-28 18:29:49
1627
1
转载 Android组件化方案
1为什么要项目组件化 2如何组件化 3组件化实施流程 1组件模式和集成模式的转换 2组件之间AndroidManifest合并问题 3全局Context的获取及组件数据初始化 4library依赖问题 5组件之间调用和通信 6组件之间资源名冲突 4组件化项目的工程类型 1ap...
2018-07-13 15:22:39
286
原创 编程习惯——如何把程序写得更健壮
举一些简单例子说明如何把程序写得更健壮1、避免创建不必要的对象 1) 定义字符串应该尽量使用 String str="hello"; 2) 如果要对字符串频繁的相加,且每次相加都会成新的字符串对象,这样会很影响性能。要用StringBuffer代替字符串相加2、将成员缓存到本地1)永远不要在for的第二个条件中调用任何方法。如下面方法所示,在每次循环的时候都会调用getCount()方...
2018-06-15 19:12:02
1183
原创 android进程内存优化手段
常见内存优化手段1、使用优化的容器,如SparseArray等2、避免内存泄露、内存溢出3、避免Bitmap的浪费,应该尽量去适配屏幕设备。4、应用内存删减常见方法 1)删减无用代码及功能资源 2)尽量减少依赖的包 3)缩减所使用的库的大小 4)dex拆分(multidex)/插件话/动态加载 5)使用外部进程(android:process) 6)跑progu...
2018-06-15 18:52:01
220
原创 Java内存泄露
一、Java内存泄露 内存泄露( memory leak):是指无用对象(不再使用的对象)持续占有内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。 一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,会提示你Out of memory,即造成内存溢出。 Java内存泄露根本原因: 长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期...
2018-06-15 18:45:14
335
原创 MVP之代码组织形式
前言: 于没有一套权威的架构实现,现在很多App项目中在架构方面都有或多或少的问题。 第一种常见问题是没有架构,需求中的一个页面对应项目中的一个activity或一个fragment,所有的界面响应代码、业务逻辑代码、数据请求代码等等都集中在其中。 第二种常见的问题是架构实现的不断变化,不断在各种架构间摇摆,一直找不到一个适合自己的架构。 google在官方示例中给出了一系...
2018-02-08 11:30:35
1100
原创 Android BLE蓝牙4.0开发详解
Android BLE蓝牙4.0开发详解一、简介 1、蓝牙版本介绍: 蓝牙发展至今经历了8个版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2。那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙(即蓝牙ble),当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。 2、蓝牙低功...
2018-02-08 11:11:23
1071
转载 Android WebView跨域访问漏洞
一、漏洞名称Android WebView存在跨域访问漏洞 二、漏洞描述 Android WebView存在跨域访问漏洞。该漏洞产生的原因是由于Android应用WebView开启了file域访问,且允许file域访问http域,未对file域的路径做严格限制所致。攻击者可以利用漏洞,远程获取APP中的所有本地敏感数据。 三、漏洞危害攻击者利用该漏洞,可远程获取用户隐私数据(包括手机应...
2018-02-08 11:03:57
4101
原创 md5、base64简介
一、MD51、MD5即Message-Digest Algorithm 5(信息-摘要算法5)用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。2、作用:MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式...
2018-02-08 10:59:58
548
原创 对称、非对称加密算法简介
一、对称加密算法: 使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。应用:一般应用登录 传输帐号密码使用对称加密算法,如DES(只有56位的密钥),AES(提供128位密钥)等加密。密钥可能是固定写死的。二、非对称加密算法 使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和...
2018-02-08 10:58:10
310
原创 手机客户端登录流程及风险说明
一、登录安全风险说明:登录安全是指需要用户进行登录的业务系统在登录操作时涉及到的安全问题;用户登录是业务逻辑中最比较重要的一部分,同时往往是最容易受到攻击的节点。二、账号面临风险1、撞库风险:撞库:撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝...
2018-02-08 10:52:57
1938
转载 RxJava详解
推荐两篇文章,写的不错,备忘之^^:1) http://blog.youkuaiyun.com/tellh/article/details/715347042)http://gank.io/post/560e15be2dca930e00da1083
2017-10-09 19:46:48
193
转载 设计模式六大原则
时隔多年,每次看都是不一样的体验~目录:设计模式六大原则(1):单一职责原则设计模式六大原则(2):里氏替换原则设计模式六大原则(3):依赖倒置原则设计模式六大原则(4):接口隔离原则设计模式六大原则(5):迪米特法则设计模式六大原则(6):开闭原则设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因。通俗
2017-09-21 17:13:17
376
转载 Android Volley详解(四) 源码分析
转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/17656437经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚。因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地梳理一遍。同时,这也是Volley系列的最后一篇文章了。
2017-08-28 12:13:34
241
转载 Android Volley详解(三) 自定义Request
转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/17612763经过前面两篇文章的学习,我们已经掌握了Volley各种Request的使用方法,包括StringRequest、JsonRequest、ImageRequest等。其中StringRequest用于请求一条普通的文本数据,JsonRequest(JsonOb
2017-08-28 12:11:32
249
转载 Android Volley详解(二) 加载网络图片
转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/17482165在上篇文章中有提到过,Volley是将AsyncHttpClient和Universal-Image-Loader的优点集成于一身的一个框架。我们都知道,Universal-Image-Loader具备非常强大的加载网络图片的功能,而使用Volley,我们也
2017-08-28 12:09:49
239
转载 Android Volley详解(一) 基本用法
转载请注明出处:http://blog.youkuaiyun.com/guolin_blog/article/details/174820951. Volley简介我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和Ht
2017-08-28 12:06:46
207
转载 Android消息循环机制
Android消息循环机制Android消息循环机制Android的消息循环机制主要先关的类有:HandlerLooperMessageMessageQueueActivityThread一、为什么用HandlerAndroid又不建议在主线程中做耗时操作,比如IO操作、网络请求等操作,否则容易引起程序无法响应(ANR)。所以
2017-08-23 15:46:14
401
转载 Java类加载器详解&双亲委派模式
Java类加载器详解 新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的bin目录下)指定的目录下的.class文件,类加载需要将.class文件导入到硬盘中,经过一些处理之后变成字节码在加载到内存中。一、Java虚拟机种的类加载器1、类加载器种类
2017-08-21 19:53:04
1382
原创 LeakCanary开源框架使用说明
一、分析内存泄漏,最常用的两种工具:一种是ddms+mat进行分析,另一种是leakcanary工具。二、LeakCanary 是一个开源的在debug版本中检测内存泄漏的java库。 LeakCanary源码:https://github.com/square/leakcanary三、使用说明1、使用方式1在 build.gradle 中加入引用,不同的编译使用不同的引用
2017-08-21 17:48:08
795
转载 Java集合类总结6——ConcurrentHashMap
HashMap:非线程安全,并且允许null,即nullvalue和nullkey,添加数据无序hashTable:线程安全,它使用synchronized锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占。它的同步级别是正对Hashtable来进行同步的,也就是说如果有线程正在遍历集合,其他的线程就暂时不能使用该集合了,这样无疑就很容易对性能和吞吐量造成影响,从而形成单点。
2017-08-18 14:41:30
176
转载 Java集合类总结5——CopyOnWriteArrayList
一、Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySe
2017-08-17 17:11:14
173
原创 Java集合类总结4——==/equals/hashCode()/compareTo()
==/equals()/hashCode()/compareTo()总结:1)==:用于比较引用和比较基本数据类型时具有不同的功能:(a).比较基本数据类型,如果两个值相同,则结果为true;(b).而在比较引用时,如果引用指向内存中的同一对象,结果为true2)equals():(a).首先equals()和hashcode()这两个方法都是从ob
2017-08-17 17:06:53
233
原创 Java集合类总结3——Map
Map接口Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。一、HashMap类1、定义:publicclassHashMap extends AbstractMap impl
2017-08-17 17:01:55
274
原创 Java集合类总结2——Set
一、Set接口Set是一种不包含重复的元素的Collection,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。继承结构: publicinterface Set extends Collection{} publicabstract class AbstractSet extends AbstractCo
2017-08-17 16:57:05
284
原创 Java集合类总结1——List
Collection接口├List接口│├ArrayList│├LinkedList│├CopyOnWriteArrayList└Vector│ └Stack└Set接口| ├HashSet|├LinkedHashSet| ├TreeSet|├CopyOrWriteArraySet└Queue接口
2017-08-17 16:47:18
228
原创 ANR总结
一、ANR问题简介 ANR是Application NotResponding的缩写。在Android系统中,ActivityManagerService(AMS)和WindowManagerService(WMS)会监测应用程序的响应时间,如果应用程序主线程(即UI线程)在规定时间内没有处理输入事件,或者对特定操作没有执行完毕,就会出现ANR。触发ANR问题的三个直接
2017-08-13 21:22:27
397
原创 android进程启动流程
一、整个android系统的进程启动流程如下: init进程 –> Zygote进程(有些系统会有Zygote64进程,64bit) –> SystemServer进程 –>各种应用进程init进程:linux的根进程,android系统是基于linux系统的,因此可以算作是整个android操作系统的第一个进程;在Linux中所有的进程都是由init进程直接或间接fork出
2017-08-12 20:59:36
542
原创 SparseArray
SparseArray一、SparseArray介绍1)SparseArray是android里为替代Hashmap而专门写的类,目的是提高效率,其核心是折半查找函数(binarySearch)。2)对比hashmapSparseArray比HashMap节省内存,原因:1、它避免了对key的自动装箱(int转为Integer类型)2、它内部则是通过两个数组来进行数据存
2017-07-06 19:24:03
403
原创 ThreadLocal
ThreadLocal一、简介public class ThreadLocal {...protectedT initialValue() {returnnull;}publicT get() {...}publicvoidset(T value) {}publicvoidremove() {...}
2017-07-05 14:32:37
175
原创 堆排序
概念:堆是一棵顺序存储的完全二叉树。小根堆:其中每个结点的关键字都不大于其孩子结点的关键字。大根堆:其中每个结点的关键字都不小于其孩子结点的关键字。对于数组:{R0, R1, ... , Rn}来说,Ri为根节点,R(2i+1)为左子节点,R(2i+2)为右子节点(1) Ri (2) Ri >= R(2i+1) 且 Ri >= R(2i+2) (大根堆),即每个节点的值
2017-06-30 16:47:23
185
原创 内部类访问权限
内部类:一种隐藏和组织代码的模式1、普通内部类拥有其外围类的所有元素的访问权,没有任何限制2、静态内部类只能访问外部类的静态成员变量class Outer{ static int x; static class Inner { void test() { syso(x);
2017-06-30 16:38:00
746
转载 构建工具演化:ant/maven/gradle
一、ant一个ant工具所使用的build.xml: 解释:ant定义了五个任务,init, compile, build, test, clean,打包之前要先编译,所以通
2017-06-29 19:28:00
305
转载 Android进程优先级
Android对于所有进程的处理态度都是尽可能不杀死。然而,资源总共就那么多,要是对所有进程都保持宽容的话,资源总会有消耗殆尽的时候。因此,在内存不足的情况,android系统需要根据一定的策略,选择性的杀死部分进程。这个策略就是对所有的进程标记优先级,优先级低的先杀死。android将进程的优先级分为5个层次,按照优先级由高到低排列如下: 前台进程(Foreground p
2017-06-21 16:22:03
222
原创 APK 签名详解
1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性。2.签名对你的App的影响。 你不可能只做一个APP,你可能有一个宏伟的战略工程,想要在生活,服务,游戏,系统各个领域都想插足的话,你不可能只做一个APP,谷歌建议你把你所有的
2017-05-23 17:39:45
2199
原创 链表反转算法-java实现
public class Test{ public static void main(String[] args){ //初始化链表 Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3
2017-05-22 18:07:07
341
原创 Android进程内存查看
AndroidAPK内存优化删减1、使用场景(内存)1)APK启动应用时内存占用及分布,即初始化时(如内核初始化,外围资源加载等)各占多少2)使用APK核心功能时内存占用及分布,如UI加载,数据加载保存3)用户常用操作时内存占用及分布2、通过命令查看内存占用及分布1)命令:adbshell dumpsys meminfo yourpakagename终端
2017-05-18 15:47:27
7134
原创 Android:process属性说明
Android:process属性说明 通常,一个应用的所有组件都运行在系统为这个应用所创建的默认进程中。这个默认进程是用这个应用的包名来命名的,元素有一个“android:process”属性,可以设置android:process=“默认包名”来设置应用全部组件的默认进程名。 每种组件元素(activity、service、receiver、provider)的mani
2017-05-17 14:52:04
795
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人