JackPeng

Keep on going never give up

Jvm系列1—Class文件格式

Java编译过程是将Java文件转换为Claaa文件,从而实现了跨平台的功能, 本文详细讲述Class文件结构。 一、 概述 计算机只能识别0和1,所以大家编写的程序都需要经过编译器,转换为由0和1组成的二进制本地机器码(Native Code)。随着虚拟机的不断发展,很多程序语言开始选择与操作系统和机器指令集无关的格式作为编译后的存储格式(Class文件),从而实现”Write ...

ps进程命令

ps进程命令 在adb shell终端,输入 ps,可查看手机当前所有的进程状态,其中ps的英文全称是Process Status。 1. ps命令参数 -t 显示进程里的所有子线程 -c 显示进程耗费的CPU时间 -p 显示进程优先级、nice值、调度策略 -P 显示进程,通常是bg(后台进程)或fg(前台进程) -x 显示进程耗费的用户时间和系统时间,格式:(...

Android Studio 内存工具

一、内存工具 Android Studio提供了强大的分析功能,关于内存分析工具包含: Memory Monitor, Heap Viewer, Allocation Tracker 1. Memory Monitor 2. Heap Viewer 堆内存查看工具,用于监控App的某一时刻的内存堆上的具体使用情况,从而帮助找出内存泄露。 用法 打开Android Studio...

Dalvik与ART的GC调试

本文主要讲述Dalvik与ART两种Android虚拟机,在GC时产生log信息的含义,便于分析。 一、Dalvik 1.1 GC含义 Dalvik虚拟机,每一次GC打印内容格式: D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats&...

Android进程生命周期与ADJ

做为应用开发者,对于进程生命周期和进程中的内存回收是透明的,但了解生命周期对加深对Andorid体系的理解很有帮助 一、 进程生命周期 Android系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。 为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入“重要性层次结构”中。 必要时,系统会首先...

进程优先级

线程与进程的最大区别就是是否共享父进程的地址空间,内核角度来看没有线程与进程之分,都用task_struct结构体来表示,调度器操作的实体便是task_struct。 一、 进程优先级 进程可划分为普通进程和实时进程,那么优先级与nice值的关系图: 优先级值越小表示进程优先级越高,3个进程优先级的概念: 静态优先级: 不会时间而改变,内核也不会修改,只能...

APP优化(二)

本文是针对Android的App开发的性能优化的专题总纲。关于性能,最关键的两个指标是响应时间与系统吞吐量(TPS)。 一、降低执行时间 这部分包括:缓存、数据存储优化、算法优化、JNI、逻辑优化、需求优化几种优化方式。 1.1 缓存 缓存分类包括: 对象缓存: 减少内存分配 网络缓存: 减少网络传输 IO缓存: 减少磁盘的读写次数 DB缓存: 减少数据库的访...

APP优化(一)

本文是针对Android的App开发优化(一)。 一、代码优化 1. 广播 应用程序内部广播通信,优先采用LocalBroadcastManager,安全性更好,运行效率更高。 优势:平时常说BroadcastReceiver,采用的是Binder通信方式,这是跨进程的通信方式,系统资源消耗固然更多。而广播LocalBroadcastManager,采用的是Handler通...

Android Launcher 1

layout: post title: “Android Launcher原理分析” date: 2015-9-20 15:30:00 catalog: true tags: - android 基本概念 本文主要讲述Launcher3屏幕滑动过程,首先需要了解Android的触摸事件分发机制。关于分发机制,可查看文章Android事件分发机制。 常用类介绍 ...

Android事件分发机制

本文源码来自andorid sdk 22,不同版本会有细微差别,但核心机制是一致的 概述 在开始讲述touch事件流程之前,还简单介绍下TouchEvent,View和ViewGroup。 1. MotionEvent 整个事件分发流程中,会有大量MotionEvent对象,该对象用于记录所有与移动相关的事件,比如手指触摸屏幕事件。 一次完整的MotionEvent...