自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android Nougat多窗口简析

Android从7.0开始支持多窗口,官方终于支持这一功能了。其实很多ODM厂商早已实现该功能,实现方式各种各样,最通用的方案是多Stack方案,比较痛苦的是每次版本升级都要花很大力气进行适配和解各种乱七八糟的bug,现在终于一统江湖了,并且第三方应用开始对多窗口进行适配兼容。

2017-02-04 15:02:54 14488 9

原创 LayoutAnimation/LayoutTransition源码分析

LayoutAnimation    Android的动画类型比较多,LayoutAnimation便是其中一种,关于LayoutAnimation的使用可参考《Android LayoutAnimation使用及扩展》,其实就是给目标ViewGroup控件添加LayoutAnimation,之后该ViewGroup展示时每个子View便会依次做动画。本质就是第一次绘制前给每个子Vie

2017-01-09 20:00:56 1399

原创 SQLiteConnectionPool学习笔记

最近碰到一个跟SQLiteConnectionPool相关的问题,然后就把这一块逻辑捋了一遍,做了一点笔记记录如下。    跟SQLiteConnectionPool相关的几个大类有:SQLiteDatabase、SQLiteConnection、SQLiteSession。一、SQLiteDatabase、SQLiteConnectionPool、SQLiteConnec

2016-02-25 23:13:17 10323

原创 Fragment流程图

Fragment本质上就是一套在所属Activity的窗口View树中添加、删除子View的管理逻辑,调用的接口是ViewGround.addView()和ViewGround.removeView(),并且Fragment的生命周期由所属Activity的生命周期所驱动。正因为无需重新创建Window,所需系统资源远小于创建新的Activity。一、Fragment部分类图关系:2、

2016-01-26 17:59:34 1304

原创 开发者选项中动画时长原理分析(Android M)

Android Animation

2016-01-04 21:12:57 16602 4

原创 WindowManagerService动画分析

我们知道Android动画主要包括Activity切换动画、窗口动画、转屏动画、窗口内部View动画,前三者在WindowManagerService(简称WMS)中完成,本篇文章重点分析Activity切换动画、窗口动画的设置,动画每一帧计算,及如何快速分析动画类型资源。阅读本文最好有一定的WindowManagerService基础,本文所有代码基于AndroidM。    典

2015-10-20 16:44:34 13026 7

原创 kill -3 pid打印trace原理笔记

做系统稳定性问题分析,当遇到系统卡死时,我们经常要使用“kill -3 pid”来打印System_Server进程各个线程的Java调用栈,根据线程状态及调用栈来更进一步定位问题点,当然某个应该界面卡顿时间长时也可以通过这个命令来抓取Java调用栈进行分析。注意native进程是不能用kill -3来打trace的,而是使用debuggerd。但是某些时候打印不出来trace,要知道原因,自然要

2015-09-22 17:43:00 11358

原创 蓝牙压力测试报抛android.os.TransactionTooLargeException异常分析总结

1、从main日志中找到异常点,如下:08-20 11:05:19.754 5023 5023 E AndroidRuntime: FATAL EXCEPTION: main08-20 11:05:19.754 5023 5023 E AndroidRuntime: Process: com.android.bluetooth, PID: 502308-20 11:05:19.75

2015-08-21 20:39:28 4150 1

原创 AsyncTask分析

AsyncTask的使用和原理分析网上有很多文章写得非常清楚,这里大概画了下时序图(不求准确),帮助理解。MyAsyncTask是自定义AsyncTask的子类,AsyncTask_Thread是线程池执行器创建的执行线程,线程以AsyncTask#count命名。相关文章分享:Android AsyncTask完全解析,带你从源码的角度彻底理解:http://bl

2015-08-14 16:46:03 904

原创 远程调试

1、adb shell netcfgguoqifa@guoqifa:~$ adb shell netcfgwlan0 UP 172.29.107.21/21 0x00001043 00:08:22:7e:a1:fetunl0 DOWN 0.0.0

2015-08-03 17:33:48 838

原创 MountService整理

刚毕业时第一个接触的模块就是Vold,这个模块虽然小,但深入下去是有一定难度的。花了点时间重新整理了下这一块的逻辑,也当温习下这个模块。挂载核心在Vold,MountService相当于对外提供了一个服务接口。在Vold内部,FrameworkListener接收MountService发来的Socket消息,NetlinkListener接收Kernel发来的Uevent事件。Stora

2015-07-23 10:06:42 1155

原创 系统异常埋点

DropBox会在以下时机抓取相关信息:a、出异常关机前SystemServer会收集以下类型报错:watchdog、anr、wtf、lowmem、native_crash、crashTAG = watchdog、anr、wtf、lowmem、native_crash、crash此时是通过ActivityManagerService.addErrorToDr

2015-07-10 17:42:57 4163

原创 深入理解Activity——Token之旅

Token是ActivityRecord的内部静态类,我们先来看下Token的继承关系,Token extends IApplicationToken.Stub,从IApplicationToken.Stub类进行继承,根据Binder的机制可以知道Token是一个匿名Binder实体类,这个匿名Binder实体会传递给其他进程,其他进程会拿到Token的代理端。    我们知道匿名Binde

2015-07-09 17:15:02 14022 2

原创 Dalvik和ART简介

1、classes.dex文件初识    我们先把QQ_236.apk后缀改为QQ_236.zip,然后解压,发现有一个classes.dex文件,这个classes.dex是java源码编译后生成的java字节码文件.但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode(机器语言操作码)都不一样.

2015-07-02 14:33:36 2745

原创 Shutdown(关机)流程

梳理了下关机流程,比开机流程简单很多,大概流程如下:

2015-06-22 11:29:11 1281

原创 Android 5.0重启恢复Task功能分析

Android5.0新增了一个重启后可恢复Task功能。在正常的Activity切换使用过程中AMS会将Task和对应截图进行保存,重启后会将Task和截图恢复到最近任务栏中。开机恢复Task没什么好说的,我们重点研究下Task和截图的保存逻辑,如下。我们重点分析下screenshotApplications()、notifyTaskPersisterLocked()、LazyTaskWr

2015-05-10 18:01:43 3290 4

原创 Lowmemorykiller笔记

从zygote孵化出来的进程都会记录在ActivityManagerService.mLruProcesses列表中,由ActivityManagerService进行统一管理,ActivityManagerService核心业务之一便是时时更新进程的状态,根据状态计算出进程对应的OomAdj值,这个值会传递到kernel中去,kernel有个低内存回收机制,在内存达到一定阀值时会触发清理OomA

2015-04-29 21:26:54 10655 1

原创 RenderThread学习笔记

文章记录自己对RenderThread学习过程,供日后回顾。我们知道5.0上为每个进程新增了一个RenderThread线程,这是一个附加的UI线程?我们通过学习这块代码来熟悉它。第一部分:RenderThread线程的启动RenderThread线程的启动过程如下图所示。涉及相关的类关系如下图:有两个注意点:①每一个窗口都对应唯一的一个Threaded

2015-04-19 20:18:24 22556 3

原创 NotificationManagerService笔记

Notification相关分析是基于5.0的代码。我们知道应用程序如果要在通知栏弹一个消息需要加上类似于下面这样的一段代码,看起来只有几行代码,实际上有两个比较大的框架在里面。一个是通过PendingIntent的静态函数getActivity()获取一个PendingIntent对象;一个是获取NotificationManagerService的服务代理对象调用notify()来post

2015-03-08 17:45:27 2461

原创 Android匿名共享内存笔记

1、ashmem_open()static int ashmem_open(struct inode *inode, struct file *file){ struct ashmem_area *asma; int ret; ret = generic_file_open(inode, file); if (unlikely(ret)) return ret; asma

2015-03-06 14:39:51 2306 2

原创 activity启动模式笔记

activity启动模式的逻辑主要在startActivityUncheckedLocked()函数中,现在来看下这个函数。 final int startActivityUncheckedLocked(ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSe

2015-03-01 21:40:17 3602 1

原创 Binder驱动笔记

Binder驱动笔记对于Binder驱动,可以一个个函数进行拆分学习,以管窥豹的方式进行理解。 以下函数分析都是基于驱动binder.c文件。1.binder_get_ref_for_node(target_proc,binder_node),该函数用来为Binder实体节点创建一个Binder引用节点,target_proc代表binder引用所在的进程。比如client获取service的Bin

2015-02-10 13:46:42 4162 1

原创 PowerManagerService笔记

1、updateIsPoweredLocked()  private void updateIsPoweredLocked(int dirty) { if ((dirty & DIRTY_BATTERY_STATE) != 0) { final boolean wasPowered = mIsPowered; final

2015-01-29 10:00:04 3480

原创 Android启动过程笔记

1、借用一张别人的启动流程图先直观感受下:注意:zygote和servicemanager都是在init进程解析init.rc时启动的。zygote进程的入口是/system/bin/app_process,入口函数是App_main.cpp的main()函数。service zygote /system/bin/app_process -Xzygote /system/bin -

2015-01-21 22:03:24 2649

原创 appNotResponding()分析

ActivityManagerService.appNotResponding()在程序无响应、ANR时被调用,分析这个函数有有助于更好地理解日志中打印出的信息。 final void appNotResponding(ProcessRecord app, ActivityRecord activity, ActivityRecord parent, boolea

2015-01-16 20:30:03 6173

原创 Binder笔记

1、IServiceManager.c中提供了一个namespace android(android 命名空间)的defaultServiceManager()全局函数,这个函数会生成一个BpServiceManager单例对象,sp defaultServiceManager(){ if (gDefaultServiceManager != NULL) return gDefaul

2015-01-10 19:12:50 2065

原创 PackageManagerService笔记

1、系统开机时PackageManagerService()构造函数会调用readPermissions()解析etc/permissions目录下的xml文件,然后将配置信息分别进行保存:assign-permission项保存在mSystemPermissions队列中、library项保存在mSharedLibraries队列中、feature项保存在mAvailableFeatures中;

2014-12-10 20:08:07 5529

原创 InputMethod窗口、wallpaper窗口管理关键函数分析

1、addInputMethodWindowToListLocked() void addInputMethodWindowToListLocked(WindowState win) { int pos = findDesiredInputMethodWindowIndexLocked(true); if (pos >= 0) {

2014-12-06 15:47:14 2661

原创 横屏机制

场景一.启动一个横屏应用

2014-10-27 10:45:32 7317 2

原创 ActivityStackSupervisor分析

文章仅记录自己的一点分析过程,供日后

2014-10-12 19:35:16 16186 2

原创 Activity管理笔记

文章仅记录自己的一点理解,供日后参考。AMS管理四大组件外加进程管理,其中最庞大的算是Activity了吧。1、AMS中对ActivityStack划分为两类,其中一类是FrontStack,另一类刚好相反。 boolean isFrontStack(ActivityStack stack) { return !(stack.isHomeStack() ^ g

2014-09-17 15:56:57 11654 1

原创 Process学习

每个进程在AMS侧对应有一个

2014-09-16 21:58:28 7151 3

原创 service学习笔记

smap.mServicesByName.put(name, r);

2014-09-15 21:47:04 4260

原创 ContentProvider笔记

final class BroadcastRecord extends Binder { final Intent intent; // the original intent that generated us final ComponentName targetComp; // original component name set on the intent f

2014-09-10 18:01:00 3754

原创 Broadcast学习笔记

1、mIntentSenderRecords是一个PendingIntentRecord哈希表。一个PendingIntentRecord对象对应的是应用层的一个PendingIntent对象(延迟性的intent),其中包含send系列方法,主要用于触发PendingIntent的Intent行为。上层应用每获取一个PendingIntent对象时在AMS这边便会生成对应的PendingIn

2014-09-04 21:54:27 13329 1

JNI详解(书)

首先,通过本书,你会很容易的掌握JNI开发,并能了解到方方面面的关于JNI的知识。 本书详尽的叙述,会带给你你很多如何高效使用JNI的启示。JNI自1997年初发布以来, Sun的工程师们和Java社区使用JNI的经验造就了本书。 第二,本书介绍了JNI的设计原理。这些原理,不仅会使学术界感兴趣,也是高效使用 JNI的前提。 第三,本书的某些部分是Java 2平台规范的最终版本。 JNI程序员可以此书作为规范的 参考手册,Java虚拟机实现者必须遵循规范,以保证各平台实现的一致性

2013-04-11

Linux下jdk1.5

ubuntu12.04亲测可用,具体用法参照http://blog.csdn.net/guoqifa29/article/details/8670161

2013-03-14

程控复习资料

复习课件+两套模拟试卷,相信对大家有点用吧

2013-01-14

空空如也

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

TA关注的人

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