自定义博客皮肤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程序猿

  • 博客(83)
  • 资源 (6)
  • 收藏
  • 关注

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

Android native memory leak detect (Android native泄露检测)简介Android应用中,经常会有业务需要使用到Native实现。比如加密,音视频播放等。也就是常见的二进制文件xxx.so这部分代码,申请的内存不走Java Heap管理。那么一旦发生内存泄露,无法使用导出MAT来进行查看。本篇文章将讲解如何使用Google霸霸提供的方...

2018-07-13 16:02:37 16801 26

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

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

2018-01-12 17:10:38 53645 2

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

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

2017-05-03 17:03:02 22459 16

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

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

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

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

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

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

原创 Shallow Heap 和 Retained Heap的区别

Shallow SizeShallow Size是对象本身占据的内存的大小,不包含其引用的对象。对于常规对象(非数组)的Shallow Size由其成员变量的数量和类型来定,而数组的ShallowSize由数组类型和数组长度来决定,它为数组元素大小的总和。Retained SizeRetained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C,

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

原创 repository ‘Gradle Libs‘ was added by unknown code

问题Build was configured to prefer settings repositories over project repositories but repository ‘Gradle Libs’ was added by unknown code解决settings.gradle中,去除repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)dependencyResolutionManagement {

2021-11-11 11:28:38 4383 3

原创 Iterm2 配置(不断更新)

基础配置参考:https://www.jianshu.com/p/246b844f4449Iterm2打开时自动source .bash_profilevim ~/.zshrc在最后一行 添加source ~/.bash_profile

2021-09-15 15:47:31 686

原创 使用Kotlin编写Gradle插件

1. 首先在根目录的buid.gradle中添加编译期kotlin插件依赖buildscript { ext.kotlin_version = '1.3.72' ext.gradleVersion = '3.2.1' repositories { google() jcenter() } dependencies { classpath "com.android.tools.build:gradle:$gradleVe

2020-08-27 11:43:24 4143

原创 android 线程使用监控思路分享

Java线程Hook使用SandHook监控Thread#start()函数的调用https://blog.csdn.net/ganyao939543405/article/details/86661040Native线程Hook使用XHook监控pthread_create方法的调用导出堆栈信息hook到线程启动动作之后,需要导出堆栈信息,分析堆栈信息能够知道启动线程的动作来自于哪个业务模块。问题因为java的线程最后也是走到native的pthread_create方法,所以hook到p

2020-06-12 10:45:41 2016

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

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

2020-03-13 12:00:06 946

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

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

2020-02-28 11:08:23 2485

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

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

2019-10-14 12:20:22 182

原创 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 1303

原创 Android 线程状态

Thread.javaThread.cpp说明TERMINATEDZOMBIE线程死亡,停止运行RUNNABLERUNNING/RUNNABLE线程可运行或正在运行TIMED_WAITINGTIMED_WAIT执行了带有超时参数的wait、sleep或join函数BLOCKEDMONITOR线程阻塞,等待获取对象锁WAITINGWAI...

2019-08-02 10:36:30 1469

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

记忆方式单 开 里 依 接 迪 组单单一职责一个类应该只负责一件事情,比如Android中的Paint只负责和画笔有关的事情,颜色、大小等,Canvas只负责画布相关的事情,画布大小设置、背景等。开开闭原则类应该对拓展开放,对修改封闭。也就是说新需求尽量不要修改之前的代码,通过拓展的方式新增功能,可以把经常修改的东西抽象出来。里里式替换原则可以理解成Java的多态,...

2019-07-05 19:04:40 196

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

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

2019-07-04 10:53:34 4980 3

原创 Android View onVisibilityChanged onAttachedToWindow onDetachedFromWindow

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

2019-05-30 19:08:40 7678 1

原创 Gradle删除本地库文件

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

2019-05-10 12:44:51 4464

原创 Android 混淆配置

混淆文件基础配置# 在这里添加项目的代码混淆规则# 混淆规则请参考:http://proguard.sourceforge.net/index.html#manual/usage.html##################### 一般使用默认 ###################### 不使用大小写混合类名,混淆后的类名为小写-dontusemixedcaseclassnam...

2019-05-06 11:40:34 1544

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

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

2019-03-11 20:15:31 1186 1

原创 Android ProGuard 还原堆栈

使用Android SDK还原位置: <android sdk>/tools/proguard/binproguardgui.sh GUI工具retrace.sh 命令行工具retrace.sh -verbose mapping.txt stacktrace.txt > ./output.txt其中-verbose代表显示返回类型以及参数类型(一般用不上)如果你...

2019-02-19 19:05:16 1346

原创 Android Studio 配置

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

2018-12-03 14:50:31 431

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

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

2018-09-18 11:47:01 4503

原创 AndroidStudio使用localMaven

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

2018-09-04 11:44:43 5320

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

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

2018-07-21 11:02:01 7661 7

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

Pixel系列手机解锁想要做下面这些事,需要先在开发者选项里打开oem解锁 pixel V版oem解锁灰色咋办:http://blog.luen.me/2018/07/07/Pixel-Verizon-unlock/index.htmloem解锁之后,就是进入fastboot模式adb reboot fastboot或者关机状态下,按住音量下建不放,然后按住开关键不放...

2018-07-18 19:31:36 28164 4

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

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

2018-06-15 17:53:42 4269

原创 Android NDK javah生成头文件

NDK开发生成头文件javah用法 javah [options] <classes>其中, [options] 包括: -o <file> 输出文件 (只能使用 -d 或 -o 之一) -d <dir> 输出目录 -v -verbos

2018-06-07 18:05:16 563

原创 c++ 宏 stdin 和 STDIN_FILENO 区别

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

2018-05-16 12:55:23 1296

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

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

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

原创 Unix 文件和目录

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

2018-04-28 11:29:32 872

原创 C++理解变量声明

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

2018-04-12 10:52:15 207

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

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

2018-04-02 23:18:36 237

原创 git删除远程提交记录

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

2018-03-20 15:12:23 22553

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

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

2018-03-01 20:50:56 244

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

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

2018-03-01 20:06:03 218

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

计数符号二进制: 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基数二进制: 二(逢二进一) 八进制: 八(逢八进一) 十进制: 十(逢十进一) 十六进制: 十六(逢十六进一)其他进制转十进制假设,mnxy表示该数,

2018-02-07 16:12:38 1838

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

现象Mac系统的Android Studio出现R类找不到问题,即使是clean之后也找不到。解决方案cd /Applications/Android\ Studio\ 3.app/Contents/bin这里的Android Studio 3.app根据你自己的studio路径做更改当然你可以通过Finder右键进入 编辑该路径下的idea.properties

2018-01-26 10:59:00 916

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

内容RelativeLayout、LinearLayout、FrameLayout、ConstraintLayout这四种类型的measure、layout、draw耗时对比。测试试图结构:测试方式使用一个结构非常深的试图结构,重复执行measure、layout、draw各1000次。计算耗时。结果(单位:ms):代码:public cla

2018-01-11 18:18:57 4093

仿android 5.0侧滑菜单按钮的打开与关闭动画

仿android 5.0侧滑菜单按钮的展开与关闭效果,详见博客:http://blog.csdn.net/a740169405/article/details/50285017

2015-12-13

自定义万能的抽屉布局(侧滑菜单)GenericDrawerLayout

一个能从屏幕四个边缘拉出来的侧滑菜单(抽屉布局) 博客地址:http://blog.csdn.net/a740169405/article/details/49720973

2015-11-08

Android 照片选择器 照片选择器 图片预览 拍照

实现了类似微信发送照片时选择最近照片、其他相册照片、以及拍照功能。 使用简单,源码已经打包成library,只需要引入,以及在自己的工程中注册两个activity以及一个读取SD卡权限

2014-11-30

android 不预览拍照 后台拍照

调用摄像头实现不预览拍照,后台拍照,并转换照片格式为竖屏,保存到SD卡

2013-09-30

JAVA SWING我的日程表

一个管理日程安排的小软件,使用的是文件存储,用户登录后能新增日程,查看日程等。

2013-09-06

空空如也

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

TA关注的人

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