自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

良秋的专栏

小小Android程序猿

原创 Android native memory leak detect (Android native内存泄露检测)

Android native memory leak detect (Android native泄露检测) 简介 Android应用中,经常会有业务需要使用到Native实现。比如加密,音视频播放等。也就是常见的二进制文件xxx.so 这部分代码,申请的内存不走Java Heap管理。...

2018-07-13 16:02:37 8099 23

原创 Android查看每个线程CPU占用情况,以及工作内容分析

简介 在使用Android Studio开发的时候,有时候会发现手机CPU使用特别高,但是又不确定哪个线程占用高。除了能够使用android profiler查看外,还可以使用命令来查看。 命令 adb shell top 使用参数: Usage: top [ -m max_...

2018-01-12 17:10:38 30936 1

原创 Android图形显示系统(一)

本文讲解的内容是Android4.1以后的系统机制,将从整体上分析Android图形显示系统的结构,不深入分析每一层内部的代码实现,更多的是使用流程图和结构图来让大家理解Android是如何绘制、合成图形并显示到屏幕上。本文将从三个层次进行讲解

2017-05-03 17:03:02 9335 9

原创 View#post与Handler#post的区别,以及导致的内存泄漏分析

简述: 写这篇文章的缘由是最近项目中查内存泄漏时,发现最终原因是由于异步线程调用View的的post方法导致的。 为何我会使用异步线程调用View的post方法,是因为项目中需要用到很多复杂的自定义布局,需要提前解析进入内存,防止在主线程解析导致卡顿,实现方法是在Application启...

2017-04-09 00:34:11 10599 9

原创 Android性能优化-过度绘制解决方案

过渡绘制:屏幕上某一像素点在一帧中被重复绘制多次,就是过渡绘制。 下图中多个卡片跌在一起,但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是android系统在绘制时会将下层的卡片进行绘制,接着再将上层的卡片进行绘制。但其实,下层卡片不可见的部分是不需要进行绘制的,只有...

2017-01-08 14:15:53 14012 3

原创 Shallow Heap 和 Retained Heap的区别

Shallow SizeShallow Size是对象本身占据的内存的大小,不包含其引用的对象。对于常规对象(非数组)的Shallow Size由其成员变量的数量和类型来定,而数组的ShallowSize由数组类型和数组长度来决定,它为数组元素大小的总和。Retained SizeRetained...

2016-12-13 16:04:43 13777 2

原创 git 非空目录添加远程仓库地址

场景 在gitHub或者gitLab添加一个仓库之后,想要将本地某目录内的文件添加到该仓库 方式一 将git仓库代码clone到本地,然后讲本地目录下的所有文件拷贝到clone之后的目录中 接着通过命令 git add . git commit -m "xxxx" git ...

2020-03-13 12:00:06 85 0

原创 使用ln命令创建软引用(相对路径与绝对路径)

存在如下目录结构 |- home |- target.sh |- childDir 我们希望在childDir目录下创建一个home目录下的target.sh文件的软引用文件 使用绝对路径 使用绝对路径相对比较简单,命令行执行: ln -s /home/target.sh /home/chi...

2020-02-28 11:08:23 116 0

原创 数据结构与算法LeetCode题目记录

链表 206 反转链表 141 环形链表 21 合并两个有序链表 19 删除链表的倒数第N个节点 876 链表的中间结点 栈 20 有效的括号 155 最小栈 232 用栈实现队列 844 比较含退格的字符串 224 基本计算器 682 棒球比赛 496 下一个更大元素 I ...

2019-10-14 12:20:22 37 0

原创 Android NDK 剥离符号信息

~/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-strip --strip-all xxxx.so

2019-08-02 15:55:38 269 0

原创 Android 线程状态

Thread.java Thread.cpp 说明 TERMINATED ZOMBIE 线程死亡,停止运行 RUNNABLE RUNNING/RUNNABLE 线程可运行或正在运行 TIMED_WAITING TIMED_WAIT 执行了带有超时参数的wait、sleep或join...

2019-08-02 10:36:30 468 0

原创 面向对象的基本设计原则

记忆方式 单 开 里 依 接 迪 组 单 单一职责 一个类应该只负责一件事情,比如Android中的Paint只负责和画笔有关的事情,颜色、大小等,Canvas只负责画布相关的事情,画布大小设置、背景等。 开 开闭原则 类应该对拓展开放,对修改封闭。也就是说新需求尽量不要修改之前的代码...

2019-07-05 19:04:40 56 0

原创 Android Binder实现浅析-Binder驱动

简介 Android是如何实现跨进程通信的,大家熟悉的Binder是什么,怎么设计的,进程间的数据如何发送接收的。本文将以及解析,并对Binder驱动实现、Native层实现、Java层实现三块做一个总结分析。 Binder学习思路 Binder与传统IPC的区别 Binder驱动的内部设计、数...

2019-07-04 10:53:34 1051 0

原创 Android View onVisibilityChanged onAttachedToWindow onDetachedFromWindow

源码SDK: 24 简介 最近碰到一个问题,某一个Fragment里,有一个View上有一个动画,而当Fragment不可见的时候(切换到别的Fragment)。这时候,View的动画应该停止,以便节省主线程计算动画值,所以研究了View的onVisibilityChanged方法,在Vi...

2019-05-30 19:08:40 1245 0

原创 Gradle删除本地库文件

简介 删除本地Gradle下载好的库版本 环境 Mac OS 位置 ~/.gradle/caches/modules-2/files-2.1/ 找到自己的库对应的group,删除即可

2019-05-10 12:44:51 1447 0

原创 Android 混淆配置

混淆文件基础配置 # 在这里添加项目的代码混淆规则 # 混淆规则请参考:http://proguard.sourceforge.net/index.html#manual/usage.html ##################### 一般使用默认 #####################...

2019-05-06 11:40:34 690 0

原创 Linux/Unix系统编程手册学习笔记

什么是操作系统、内核 内核的职责 进程调度(CPU切换,资源调度等) 内存管理 提供文件系统(文件的创建删除等) 创建和终止进程 对设备的访问(鼠标、键盘等输入输出设备) 联网 提供系统调用接口(API) 内核态与用户态 ...

2019-03-11 20:15:31 186 0

原创 android gradle 在assembleRelease之前 or 之后执行自定义task

背景 项目中需要在apk打包完之后做一些任务,比如提交mapping文件等 思路 自定义一个plugin,在plugin被应用的时候,新建一个task,并标记该task在assembleRelease之后执行 gradle的plugin使用这里不讲。 源码 Task diyTask = proje...

2019-02-20 18:54:56 3892 0

原创 Android ProGuard 还原堆栈

使用Android SDK还原 位置: <android sdk>/tools/proguard/bin proguardgui.sh GUI工具 retrace.sh 命令行工具 retrace.sh -verbose mapping.txt st...

2019-02-19 19:05:16 347 0

原创 Android Studio 配置

R文件飘红 如果能够编译通过,且clean之后还是飘红,试试下面的方法。 点击 Help > Edit Custom Properties。如果您之前从未编辑过 IDE 属性,Android Studio 将提示您新建一个 idea.properties 文件。点击 Yes 创建文...

2018-12-03 14:50:31 178 0

原创 CMake使用总结,不断更新

使用C++11 CMake 3.1或者更高版本 set(CMAKE_CXX_STANDARD 11) 更低版本 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 生成可执行文件 set(SOURCE_FILES ...

2018-09-18 11:47:01 1280 0

原创 AndroidStudio使用localMaven

简介 有时候开发一个三方库,开发阶段并不希望提交到服务器maven,只想提供给本地的其他项目使用的时候,可以使用localMaven,将三方库提交到本地计算机仓库,然后其他项目将localMaven配置到仓库查找列表,这样,可以避免不断的往服务器提交三方库而需要不断的提升版本号的问题。 发...

2018-09-04 11:44:43 1902 0

原创 Mac OS10.12 编译Android源码8.1

拉取源码 自行百度 启动编译 自行百度 编译遇见的坑 源码拉取,以及编译顺序大家都会,但是编译坑太多,坑得记一下,以免后面再掉下去。 Fuck Jack-Server jack-server报错如下 [ 53% 48295/89583] Ensuring Jack se...

2018-07-21 11:02:01 4498 3

原创 Google亲儿子 Nexus/Pixel 手机刷机Root之旅

Pixel系列手机 解锁 想要做下面这些事,需要先在开发者选项里打开oem解锁 pixel V版oem解锁灰色咋办:http://blog.luen.me/2018/07/07/Pixel-Verizon-unlock/index.html oem解锁之后,就是进入fastboot模式 ...

2018-07-18 19:31:36 14539 3

原创 CLion开发,运行报错后问题排查

简介 CLion开发期间,很容易碰到如下问题 问题定位 运行的时候,不要直接跑,而是调试运行 此时,断点会直接停在出错的位置,通过下方调用栈信息,能够推出大致是什么问题: ...

2018-06-15 17:53:42 1567 0

原创 Android NDK javah生成头文件

NDK开发生成头文件 javah用法 javah [options] <classes> 其中, [options] 包括: -o <file> ...

2018-06-07 18:05:16 250 0

原创 c++ 宏 stdin 和 STDIN_FILENO 区别

stdin是一个File *类型,而STDIN_FILENO是一个文件描述符 如果用read方法,那么传递STDIN_FILENO 如果是用fgets方法,那么传递stdin read和fgets的区别,参考:https://blog.csdn.net/u010857719/article/...

2018-05-16 12:55:23 623 0

原创 C++线程和Java线程的对比

C++里的互斥锁和java里的synchronized同步代码块类似。 C++里的条件变量和java里的wait/notify类似。 C++里的读写锁和java里的重入锁(ReenreantLock类)类似。

2018-05-10 17:12:57 874 4

原创 Unix 文件和目录

用户ID和组ID 类别 含义 实际用户ID / 实际组ID 我们实际上是谁(登录时确定) 有效用户ID / 有效组ID 用于文件访问权限检查(可以被更改,比如改成超级管理员,那就无敌了) 保存的设置用户ID / 保存的设置组ID 由exec函数...

2018-04-28 11:29:32 583 0

原创 C++理解变量声明

摘自《C++ Primer Plus》 变量的定义包括一个基本数据类型(int long float…),和一组声明符。 在同一条定义语句中,虽然基本数据类型只有一个,但是声明符却可以不同,也就是说,一条定义语句可能定义出不同类型的变量。 // i是一个int型的变量,p是一个int型的...

2018-04-12 10:52:15 105 0

原创 C++构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public: int a; float b; //构造函数初始化列表 ...

2018-04-02 23:18:36 103 0

原创 git删除远程提交记录

背景 开发过程中,如果把本地的某一个commit推送到远端后,希望把远端的该条记录删除。 git revert 需要删除本地commit,并同步到服务器,使用git revert可以删除某一次提交,并为本次删除生成一个新的提交。也就是说不是把之前的提交记录抹去,在提交记录中还是能看到之前...

2018-03-20 15:12:23 13377 0

原创 C++复合类型-指针变量

使用以下的一个例子来记录指针变量的知识内容 #include <iostream> int main() { // 定义一个变量 i, 并赋值为 0 int i = 0; // 输出变量i的内存地址,0x7ffee9eec818 ...

2018-03-01 20:50:56 102 0

原创 C++复合类型-引用变量

变量定义 int a = 0; 这里的 a 就是一个变量,在内存里,开辟了四个字节的内存空间,a 指向的首个字节的地址。 而 “0” 是放在这四个字节空间里的数据。 我们把 a的地址打印出来 std::cout << &a &l...

2018-03-01 20:06:03 101 0

原创 二进制 八进制 十进制 十六进制

计数符号 二进制: 0 1 八进制: 0 1 2 3 4 5 6 7 8 十进制: 0 1 2 3 4 5 6 7 8 9 十六进制: 0 1 2 3 4 5 6 7 8 9 A B C D E F 基数 二进制: 二(逢二进一) 八进制: 八(逢八进一) 十进制: ...

2018-02-07 16:12:38 260 0

原创 Android Studio R类找不到(Mac)

现象 Mac系统的Android Studio出现R类找不到问题,即使是clean之后也找不到。 解决方案 cd /Applications/Android\ Studio\ 3.app/Contents/bin 这里的Android Studio 3.app根据你自己的studi...

2018-01-26 10:59:00 589 0

原创 Android 不同布局类型measure、layout、draw耗时对比

内容 RelativeLayout、LinearLayout、FrameLayout、ConstraintLayout这四种类型的measure、layout、draw耗时对比。 测试试图结构: 测试方式 使用一个结构非常深的试图结构,重复执行measure、layout、dr...

2018-01-11 18:18:57 1910 0

原创 git命令总结

getDimension和getDimensionPixelOffset的功能类似 如果单位是dp或sp,则需要将其乘以density 如果是px,则不乘。 getDimension返回float,getDimensionPixelOffset返回int. getDimensionPixelS...

2017-12-28 17:22:41 166 0

原创 java.lang.RuntimeException: Package manager has died

问题:报错信息:java.lang.RuntimeException: Package manager has died原因:PackageInfo中数据量太大了,在部分手机上超出了Binder可传递的最大容量,进而导致PacakgeManager崩溃。解决:因为我只要用到versionName和...

2017-08-22 12:32:34 2405 0

转载 git clone 非空目录

如果我们往一个非空的目录下 clone Git 项目,就会提示错误信息:fatal: destination path ‘.’ already exists and is not an empty directory.解决的办法是: 进入非空目录,假设是 /workdir/proj1 git cl...

2017-08-21 23:47:41 2627 0

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