自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (9)
  • 收藏
  • 关注

原创 Android Hook 一 Hook CloseGuard

一、抛出问题在上一篇 dalvik.system.CloseGuard 介绍了CloseGuard的原理和作用,并在文中提到APP端可以利用Hook REPORTER 在来实现客制化的上报提示信息本章通过代码来学一下怎样Hook这个REPORTER来定制上报信息功能。二、案例分析直接上代码:package com.peterzhang.androidhookdemo;impor...

2019-01-03 19:55:26 1879 1

原创 Gradle学习三 :AS自定义Gradle插件

一、定义插件1.File-New Module-Android Library,取名plugin12.删除plugin1目录下所有文件,只保留build.gradle编写build.gradle,代码如下:apply plugin: 'groovy'apply plugin: 'maven'dependencies { compile gradleApi()//gradle ...

2019-01-02 11:09:49 682

原创 声纹识别调研

1. 基础概念声纹(Voiceprint),是用电声学仪器显示的携带言语信息的声波频谱。现代科学研究表明,声纹不仅具有特定性,而且有相对稳定性的特点。成年以后,人的声音可保持长期相对稳定不变。实验证明,无论讲话者是故意模仿他人声音和语气,还是耳语轻声讲话,即使模仿得惟妙惟肖,其声纹却始终不相同。2. 核心技术声纹识别的主要任务包括:语音信号处理、声纹特征提取、声纹建模、声纹比对、判别决策等...

2018-12-28 11:45:18 860

原创 dalvik.system.CloseGuard 介绍

CloseGuard is a mechanism for flagging implicit finalizer cleanup of resources that should have been cleaned up by explicit close methods (aka “explicit termination methods” in Effective Java)大致意思就...

2018-12-28 08:39:01 4090

原创 Android Surface显示系统框架一概览

基于Android7.1源码和相关资料画了APP UI绘制显示的大致框架。涉及安卓系统全栈内容:APP层framework层(WMS)native层(SurfaceFlinger)HAL层(hwcomposer/gralloc)包括了如下概念:进程通信组建:binder/Ashmem,作为模块之间沟通的桥梁,如果不清楚这两个实现机制,很难明白UI渲染如何从APP层发起请求经过...

2018-12-24 00:25:30 1044 2

原创 Linux 进程通信-共享内存Shmem示例

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2018-12-18 15:46:23 3565

原创 Dalvik虚拟机内存碎片测试分析

《移动App性能评测与优化》第一章1.3.3介绍了优化Dalvik内存碎片。文中列举了一段代码,可能会在GC后引起内存碎片问题,代码如下:private Object result[] = new Object[100];void fool(){ for (int i = 0;i < 100; i++){ byte[] tmp = new byte[2000];...

2018-12-05 10:02:29 284

原创 Android doze模式分析一

一、引言DOZE是安卓系统从6.0(API级别23)开始引入的对低电和应用待机模式的优化。具体介绍可以参考developers官方文档。阅读完官文后,思考几个问题:6.0之前,APP怎么处理可以让系统不休眠?6.0开始,系统如何解决APP不让系统休眠的问题?二、问题简答6.0之前,如果不希望APP运行过程系统休眠,可以通过在APP内申请PowerManager.WakeLock保证...

2018-11-25 00:58:28 2301

原创 Android native层发送广播

github代码地址

2018-11-06 17:47:13 2566

原创 青蛙跳台阶算法,n m

问题描述:一个青蛙,一次可以跳1级台阶,也可以跳2级,…也可以跳n级,总共有m级台阶,问青蛙总共有多少种跳法?问题分析:以n=2为例当m =1 时f(1) = 1当m =2 时f(2) = 2当m =3 时f(3) = 3 = f(2)+f(1)当m =4 时f(4) = 5 = f(3)+f(2)因此当m>2的时候f(m) = f(m-1)+f(m-2)参考斐波那契数列以...

2018-11-04 23:10:29 647

原创 java生产者消费者模型,需要考虑多线程安全

方法一:使用synchronized做同步`package ProducerConsumer;import java.util.LinkedList;import java.util.Queue;public class ProducerConsumerSynchronized {private final int MAX_LEN = 100;private Queue queue ...

2018-11-02 14:35:52 419

原创 《代码整洁之道》阅读笔记

让营地比你来的时候更干净1.pulic方法可以通过单元测试 2.类的行数不要超出1000行,函数只做一件事,做好一件事 3.函数内部缩进层级不超过4层 4.函数参数个数不要超过6个 5.方法的行数不要超出100行 保持类、方法职责单一 短小精悍的类和方法更具有可读性,随着时间的增加,代码依然具有很高的维护性 6.方法不要返回空值,可以返回空集合,这样可以减少引用端非空判断的数量,...

2018-09-12 16:01:56 176

原创 安卓线程学习五 之 HelloWorld app运行时线程资源分析

一 抛出问题一个最普通的 HelloWorld app运行以后,总共会开启多少线程,这些线程分别是什么作用,线程的status是什么?二 分析helloworld app运行以后,打开Android Studio — Tools — Android — Android Device Monitor ,查看Threads信息,如图所示: 总共有14个线程2.1.虚拟机线...

2018-08-08 17:54:27 1754

原创 安卓线程学习四 之 线程优先级和调度

一 问题思考安卓开发,如果想设置线程优先级有两种方法:1 Android sdk也提供一个设置线程优先级的方法2 Thread.java里面提供了设置线程优先级的方法这两个方法有什么区别,应该选择使用哪一个呢?二 线程优先级的原理2.1. android.os.process.java设置线程优先级源码分析/** * Set the priorit...

2018-08-07 10:08:51 3639 1

原创 安卓线程学习三 之 线程状态

一 源码分析在Thread.java类中,有一个枚举类State描述了线程状态机:/** * A thread state. A thread can be in one of the following states: * <ul> * <li>{@link #NEW}<br> * A thread...

2018-08-05 23:10:51 901

原创 安卓线程学习二 之 java线程启动分析

安卓系统或应用开发,java多线程编程是非常重要也是比较难的一个知识点。掌握线程的实现原理、生命周期,合理的使用线程、线程池对于开发稳定、高效的程序是必须的基础。结合安装系统、应用开发实践,我们先思考下面几个常见的问题:安卓系统基于Linux实现,每一个java线程会对应一个pthread线程。每一个app在启动之后都会启动一个binder线程用于监听消息事件,安卓系统是基于消息驱动。...

2018-07-31 00:44:27 737

原创 安卓系统之线程学习-概要

安卓系统或应用开发,java多线程编程是非常重要也是比较难的一个知识点。掌握线程的实现原理、生命周期,合理的使用线程、线程池对于开发稳定、高效的程序是必须的基础。结合安装系统、应用开发实践,我们先思考下面几个常见的问题:安卓系统基于Linux实现,每一个java线程会对应一个pthread线程。每一个app在启动之后都会启动一个binder线程用于监听消息事件,安卓系统是基于消息驱动。...

2018-07-31 00:43:32 641

原创 jdk native源码下载

一 背景java宣称一次编译,到处运行,主要功劳在jvm隔离了系统平台的差异性。jdk代码包括:java 用于提供开发接口c 用于jni调用c++ 汇编 用于适配不同操作系统和芯片平台在windows平台下载jdk安装包,安装成功之后,会在安装目录生成:其中src是部分jdk开源源码,解压以后: 可以看到jdk开源代码部分只包括java代码。开发过程如果需要了解j...

2018-07-28 02:27:54 1427 1

原创 Android app 配置文件使用分析

在安卓app开发中,常需要将一些数据放在配置文件,辅助程序开发和运行。依据数据复杂度、使用场景等条件,会存在不同种类的配置文件,比如最常见的xml文件,使用在Androidmanifest.xml,res资源定义等。其实除了xml之外还有其他格式的文件可以用作配置文件,比如json、properties等。下面来详细看一下:1.Properties文件常用于保存软件配置信息,类似has...

2018-07-18 23:53:30 4707

原创 AirPlay Android接收端学习一 协议

一 AirPlay 接收端描述AirPlay是苹果的私有协议,苹果官方未开放api和sdk,目前相对权威的一份非官方协议文档。这篇文档详细描述了aiplay 服务发现、图片、音视频、镜像投屏的相关协议,给我们开发airplay设备提供了很好的参考。但是不足之处是文档已经有6年多时间没有更新过,对于IOS的新变化可能没有完全同步。在开发过程中我们可能会面临一些未知的坑,需要针对具体问题来逐一解决...

2018-07-08 17:43:16 8230 8

原创 hashmap 线程安全问题分析

1.问题引入开发过程使用了HashMap全局变量作为缓存HashMap<String, String> mCacheMap写(put)mCacheMap是线程R读(get)mCacheMap是线程WHashmap是非线程安全的集合类,在此场景中RW分属于两个不同线程,会存在读写数据不一致性问题。比如W线程正在更新HashMap过程中,R线程同时读取HashMap,由...

2018-06-23 23:48:44 5818

原创 静态代码分析学习

背景软件开发过程中,工程师需要花费大量的时间和精力修改代码缺陷。从下图可以看出,在软件开发过程中,测试成本随着设计构建、QA、系统集成阶段的发展在不断增加。因此工程师应该努力在设计开发阶段优化代码、定位修复代码缺陷,这样可以节省大量时间和人力成本。1 代码静态分析知识 【代码[静态分析](Program Static Analysis)是指在不运行代码的方式下,通过词法分析...

2018-03-28 09:25:55 6380 2

原创 gradle学习二 利用javassist api修改class字节码

一 前言 Javassist (Java Programming Assistant) makes Java bytecode manipulation simple. It is a class library for editing bytecodes in Java; it enables Java programs to define a new class at runtime and

2017-11-22 13:24:37 2568 1

原创 Gradle 学习一 学习资料准备

一 概述目前开发android项目,使用as开发、gradle构建已经成了标配。默认新建的as 工程会给我们生成基础的build.gradle文件,里面包含了构建一个app所需要的最基本的配置声明。实际项目中,需求变化莫测,尝尝需要扩展gradle脚本来实现一些特定功能,这就需要我们对gradle比较熟悉。因此,只有真正明白gradle的原理,android app里面build.gradle的涵义

2017-11-16 17:51:20 343

原创 ClassLoader 三 Android 类加载

一 前言Android类加载同样遵循jvm虚拟机规范,不同点是class不是被类加载器直接装载,而是先被打包成dex文件,然后交由BaseDexClassLoader来完成类加载。二 分类BaseDexClassLoader 包含两个子类 1. DexClassLoader 2. PathClassLoader下面分别看下对应的源码 :package dalvik.system;import j

2017-11-14 17:42:05 301

原创 滴滴插件VirtualApk学习一 编译

一 代码代码下载git clone  https://github.com/didi/VirtualAPK代码结构:VirtualAPk AndroidStub 插桩文件,配合编译app  示例demo主工程CoreLibrary 核心库PluginDemo 示例demo插件virtualapk-gradle-plugin gradle插件二 编译目前版本的代码只支持2.14.1版本

2017-11-10 18:01:15 762

原创 Classloader 二 自定义类加载器

一 为什么需要自定义类加载器1.假设需要加载的类需要保密,那么java自带的app类加载器就无法完成加载的任务,这个时候就需要通过自定义类加载器先对类文件进行解密,然后再进行加载。2.加载指定路径的类文件。比如类文件放在磁盘的某个文件夹、或者来自网络。下面的例子会展示加载指定磁盘目录下的一个类文件的方法。二 示例自定义一个类加载器MyClassLoader,继承自ClassLoader,重写find

2017-11-09 17:25:20 319

原创 Classloader 一 基本概念

一 前言java程序执行流程,以下demo为例:package java;public class JavaClassDemo { public static void main(String[] args) { // TODO Auto-generated method stub String str = new String("demo...

2017-11-09 15:04:05 232

原创 databinding源码分析一

前言databinding是google在2015年发布的一个库,支持布局文件和mode数据之间进行绑定。最新版本已经支持双向绑定,数据的更新可以触发同步到布局对应的ui界面,布局文件的数据更新也可以传递到mode数据上。1. 数据更新如何触发ui更新的?2. ui操作是如何关联上数据的?3. 自定义view该如何关联数据绑定?带着以上三个问题分析源码,本篇先分析问题一: databinding源

2017-10-24 11:13:39 772

原创 Activity启动模式

1. standard每次启动会新建一个实例2. singleTop栈顶复用,只有任务栈里面有要启动的activity的实例,并且在栈顶,那么通过调用onNewIntent()直接复用这个实例;否则,重建一个新的实例。使用场景:适合收到通知弹出展示的activity,如果已经弹出一个界面以后,再有新通知到来可以避免重复创建。3. singleTask单例模式。只要全局任务栈中有要启动的activit

2017-10-18 15:03:20 246

原创 java 线程池

一 什么是线程池顾名思义,一个池子里面用来存放一定数量的线程资源。类似的概念还有socket连接池(okhttp)、数据库连接池。池子里面包含了几个概念,1.一个容器用来存放指定数量的资源;2.池子里面的资源可以复用。二 为什么用线程池多线程可以提升多核cpu的利用率。线程少,cpu时间片切换,线程上下文切换开销比较大;线程太多会增加内存开销,并且线程创建、销毁的代价也比较高。权衡cpu利用率提升与

2017-10-17 15:04:45 216

原创 android图片加载框架-磁盘缓存

一、概述上一节分析了内存缓存LRUCache,内存缓存可以提高图片的加载效率,避免重复从网络端下载或者磁盘加载。但是在移动设备端,一个应用可以使用的内存是有限且宝贵的,当遇到加载大量图片的场景时,只有内存缓存是没办法满足需求。再比如,我们在做相册app时,有一个很重要的场景是,app需要使用列表加载本地磁盘大量的图片。首先图片大小不一,可能存在很大的图片。这种情况在滑动列表的时候,由于图片加载耗时会

2017-10-12 18:55:10 754

原创 android 图片加载框架-内存缓存

概述缓存可以提高图片加载效率,针对数据源来自网络的图片,还可以减少带宽。缓存一般情况分两类:内存缓存、磁盘缓存。本章主要介绍内存缓存。怎么来撸一个内存缓存,hashmap?软引用?大小限制?回收规则?一堆的基础需求浮现在了脑海。当看了picasso,universal imageloader ,glide,fresco等图片加载框架,发现内存缓存的实现基本一致,都是使用lrucache。(fresc

2017-09-30 17:41:16 287

原创 jvm虚拟机基本概念

1. JVM 运行时数据区域1 方法区保存类信息、常量、静态变量2 程序计数器虚拟机字节码指令的地址3 java栈描述java方法内存模型,包括局部变量、操作数栈、动态链接等信息。局部变量包括类型:boolean byte char short int long double float、对象引用、方法返回类型。如果线程请求的栈深度大于虚拟机的栈深度,会报错StackOverFlow;如果申请

2017-09-30 16:32:30 246

原创 TCP 2MLS

MSL背景TCP建立连接三次握手,断开连接四次分手。如上图所示,在四次分手过程,TIME_WAIT状态也被叫做2MSL等待状态。MSL,the maximum segment lifetime。segment可以在网络中存活的最长时间,超过这个时间会被丢弃。这个时间限制是有界限的,TCP Segment通过IP datagrams进行传输,IP datagrams使用ttl属性来定义这个时间。MSL

2017-09-30 15:40:27 2110

原创 TCP Keepalive Timer

简介TCP Keepalive是一有争议的特征,不是TCP规范的一部分。目前协议专家仍然争论是否属于传输层范围,或者应该纳入应用层协议来处理。特征tcp keepalive具有检测死连接的作用。但是有一些缺陷: Keepalives are not part of the TCP specification. The Host Requirements RFC provides three re

2017-09-21 13:44:46 992

原创 Android开源图片加载框架选择

该如何选取图片加载框架功能描述:加载本地磁盘存储的大量图片,以列表缩略图的格式呈现,点击其中一张图展示大图。 其他功能需求:支持自动旋转内存、磁盘缓存。支持gif支持resize支持bitmap格式定义。argb8888,rgb565支持webp,可以减小图片大小uil: 优点:出现的比较早 缺点:已经停止维护了picasso: 优点:代码量小,简单易读 缺点:缓存的是原图,

2017-08-30 17:50:26 553

原创 HTTP 常见问题总结

什么是http协议诞生背景:1989年3月欧洲核子研究组织的Tim Berneer-s Lee提出共享知识的思想,引出WWW(World Wide Web)。WWW三项基础技术:页面文本标记语言html,文档传递协议http,文档地址标识url。http 超文本转移协议,在网络分成中属于应用层。为什么说http协议是无状态的对于发送的请求或者响应都不做持久化处理。优点:更快处理大量事务,确保协议的可

2017-07-22 14:55:24 377

原创 Android App 架构设计

简介本文是对谷歌原生文档的翻译,仅供学习参照。原文链接此文档写给希望学习最优编程实践和架构以开发健壮、高质量APP的开发者。开发者常遇到的问题传统的桌面程序大多数使用场景是有一个启动入口,作为一个独立进程运行。Android app结构要复杂很多,一个典型的Android app由很多组件构成,包括activities,fragment,services,content providers 和bro

2017-07-21 16:44:13 15034

原创 Android图片系列-2.Android App图片压缩、裁剪分析整理

App图片压缩裁剪

2017-07-14 16:13:03 1748

Javassist 修改class字节码

Javassist 提供了java类库,用于方便操控Java字节码。功能包括:运行时创建java class,修改class。与其他同类工具(asm等)不同的是,Javassist提供了两个层面的API: 1.java代码层 2.字节码层 通过java代码层,开发者即时对字节码不是很熟悉,也可以非常方便快速的完成字节码的修改。

2017-11-22

Ant编译打包android工程流程

Ant编译打包android工程,签名,多渠道

2015-09-22

两个工程打包一个apk

两个Android工程打包一个apk. 1.eclipse 2.mk

2014-11-06

android.jar(android 4.2.2)

包含了所有@hide接口的SDK,基于android4.2.2版本制作

2014-07-20

ListPopupWindow + 透明遮罩显示隐藏

实现一个效果,点击button后尾随一个列表,这个列表内容和布局可以随意定制,并且列表弹出的时候整个activity加上一层透明遮罩,点击任意位置列表消失,透明遮罩背景消失。

2014-04-12

REST 架构风格与基于网络的软件架构设计

REST 架构风格与基于网络的软件架构设计

2010-08-09

SCJP scjp学习

SCJP scjp学习 Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0

2010-08-05

名片识别文章 ocr 名片识别

集成汉英ocr系统识别中文名片 一种名片图像的文字区块分割方法.pdf 中文名片识别系统.pdf

2010-08-05

算法导论(中文版)(现代计算机常用数据结构和算法)

算法导论(中文版)(现代计算机常用数据结构和算法)

2009-12-04

空空如也

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

TA关注的人

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