自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhenjie.Chang的专栏

风起于清萍之末

  • 博客(26)
  • 收藏
  • 关注

原创 Android 菜单系统分析

Android的菜单系统主要指的是ActionBar的Menu菜单。首先来看下Android菜单的使用方法:@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.test_menu_new,menu); return t

2017-08-09 09:38:27 2269

原创 ContentProvider的启动流程分析

ContentProvider是Android系统的四大组件之一,主要用于向外部提供数据。不仅可以向自己应用进程提供数据,也可以向其他进程的提供数据。所以在分析ContentProvider的时候我们首先分析本进程的ContentProvider的启动过程,然后再分析调用其他进程的ContentProvider的时候ContentProvider的安装启动过程。本进程ContentProv

2017-03-17 15:51:12 4438

原创 BroadcastReceiver源码分析

Android系统的广播机制是一种基于消息发布和订阅的事件驱动模型,即广播发送者负责发布消息,而接收者需要先订阅消息,才能接收到消息,Android系统中的广播机制是BroadcastReceiver组件。广播接收者需要首先将自己注册,最终他们是将自己注册到了AMS服务中,当广播发送者发送一个广播的时候,首先发送到AMS服务中,然后由AMS服务发送给对应的接收者。BroadCastRe

2017-03-17 14:46:04 903

原创 Service的启动流程分析

我们要启动一个Service服务一般都是在Activity类中直接调用startService(Intent)来启动,而Activity类中并没有相关的方法,我们知道Activity继承自ContextWrapper,ContextWrapper类中的startService方法直接调用了ContextImpl的startService方法。Service的可以在当前的进程中启动,也可以在新的

2017-03-17 13:51:34 500

原创 Activity的启动流程分析

Activity是Android应用程序的四大组件之一,负责管理Android应用程序的用户界面,一般一个应用程序中包含很多个Activity,他们可能运行在一个进程中,也可能运行在不同的进程中。我们主要通过启动在不同进程中的Activity,来分析Activity的启动流程及AMS对Activity的管理逻辑。有两个应用程序App1和App2,在App1的Activity A

2017-03-17 12:46:19 2276

原创 ActivityManagerService的启动过程

AMS是Android系统中非常重要的核心服务,负责Activity管理。对于应用中创建的每一个Activity,在ActivityManagerService中都会有一个与之对应的ActivityRecord,这个ActivityRecord记录了应用程序中的Activity的状态。 ActivityManagerService会利用这个ActivityRecord作为标识,对应用程序中的Act

2016-12-31 11:44:15 1607

原创 Android界面性能分析及优化

性能问题分析主要包括三个方面1.界面渲染2.内存与GC3.电量优化界面渲染大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能我们希望App能够有更多的动画,图片等时尚元素来实现流畅的用 户体验。但是Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到

2016-09-19 14:04:59 2728

原创 Android Doze模式分析

Android 6.0 Doze模式分析Doze模式是Android6.0上新出的一种模式,是一种全新的、低能耗的状态,在后台只有部分任务允许运行,其他都被强制停止。当用户一段时间没有使用手机的时候,Doze模式通过延缓app后台的CPU和网络活动减少电量的消耗。PowerManagerService中也有Doze模式,和此处的Doze模式不一样,其实此处叫Device Idle模式更

2016-09-12 15:01:23 26792 1

原创 BatteryStatsService电池电量统计服务分析

BatteryStatsService主要负责电池电量的统计信息,首先我们简单的看下电量统计服务的启动过程。BatteryStatsService启动过程从BatteryStatsService的启动时序图可以看出,BatteryStatsService服务是在ActivityManagerService服务中启动的1. 在SystemServer中startBoots

2016-09-12 14:39:34 6015

原创 BatteryService服务分析

BatteryService是在systemServer启动核心服务的时候启动的。同样我们按照PMS启动的流程来分析BatteryService的启动流程。1.BatteryService的构造方法BatteryService的构造方法比较简单,只是从资源中获取一些预定的值电量统计服务mBatteryStats = BatteryStatsService.getServi

2016-09-12 14:22:36 5294

原创 Power按键流程分析

从InputManagerService分析我们知道,当按下手机的Power键之后,按键事件会传到InputDispatcher 的notifyKey 方法,然后调用到调用了NativeInputManager的interceptKeyBeforeQueueing函数,最终在这个函数中会调用到PhoneWindowManager中的interceptKeyBeforeQueueing函数,以上主要

2016-09-12 14:01:35 5935

原创 PMS服务之updatePowerStateLocked方法分析

updatePowerStateLocked更新电源的状态,是PowerManagerService的核心方法,当电源状态发生改变最终都会调用到updatePowerStateLocked方法,下面分析这个方法的实现。private void updatePowerStateLocked() { if (!mSystemReady || mDirty == 0) {

2016-09-12 10:55:34 4058

原创 PowerManagerService的启动流程

PowerManagerServcie是android系统电源管理的核心服务,它在Framework层建立起一个策略控制方案,向下决策HAL层以及kernel层来控制设备待机状态,控制显示屏,背光灯,距离传感器,光线传感器等硬件设备的状态。向上提供给应用程序相应的操作接口,比如听音乐时持续保持系统唤醒,应用通知来临唤醒手机屏幕等场景等,PMS也是系统的核心服务,启动流程的时序图如下:启动流程时

2016-09-12 09:24:36 3127

原创 PowerManager的用法分析

在分析PMS的工作原理之前,我们先来分析下PowerManager的用法PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");

2016-09-08 19:58:07 8145

原创 将博客搬家至简书

将博客搬至简书

2018-09-10 10:48:25 1085 2

转载 Java读取文件到字节数组的几种方法

package zs; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFo

2017-08-11 10:41:27 911

转载 Android 5.x SELiunx 权限问题解决方法

android 5.x开始,引入了非常严格的selinux权限管理机制,我们经常会遇到因为selinux权限问题造成的各种avc denied困扰。  本文结合具体案例,讲解如何根据log来快速解决90%的权限问题。 遇到权限问题,在logcat或者kernel的log中一定会打印avc denied提示缺少什么权限, Command:  cat /proc/kmsg |

2016-11-09 14:25:34 1092

原创 Looper和Handler的分析

在写程序的时候我们经常用到handler来进行通信,但是却不太理解Handler的通信机制,今天有机会看了一下,下面来分析一下handler的机制。看到Looper和handler就想起以前写程序的时候常用的几个方法Looper.prepare(),Looper.loop(),Handler的handleMessage(),就先从Looper.prepare()来分析:以下是Looper.

2015-01-22 18:06:49 645

原创 ubuntu下 deb包安装方法

sudo  dpkg  -i  package.debdpkg的详细使用方法,网上有很多,下面简单列了几个:dpkg -i package.deb安装包dpkg -r package删除包dpkg -P package删除包(包括配置文件)dpkg -L package列出与该包关联的文件dpkg -l pac

2015-01-14 09:39:12 628

原创 Android 开发之Navigation Drawer

侧滑菜单在Android应用中应用很常见,Android 的API中提供了侧滑菜单,我们可以很方便的将他应用在我们的项目中。那么如何创建一个侧滑菜单呢?创建布局在项目的用户界面的xml布局文件中使用标签,标签必须为xml的根标签。在标签中只能放置两个元素,其中一个放置界面的主要内容,另一个用来放置侧滑菜单。<android.support.v4.widget.DrawerLay

2014-12-10 18:25:40 636

原创 Android 开发之Preference

在应用开发中经常用到设置。

2014-11-20 19:49:23 758

原创 windows下配置openGrok源代码阅读工具

虽然说windows下的源代码阅读工具sourceInsig

2014-11-16 22:09:57 1924

原创 Android Menu的几种实现方式

android menu实现方式有好几种,有时候容易

2014-11-11 17:13:33 3156

原创 HttpClient网络通信

好记心不如烂笔头,今天看书看到这个知识,记录一下        Apache接口的核心功能时HttpClient,与网络有关的功能几乎都要用到HttpClient,我们可以把HttpClient想象成一个浏览器,通过它的API可以很方便的发出get和post请求        在项目中一般讲HttpClient写成单例模式。public class CustomerHttpClient

2014-11-04 12:45:57 437

转载 Android JNI 知识简介

最近在学习Android JNI的东西,把最近看的东西整理一下     JNI 是本地编程接口,即 Java Native Interface,它允许java代码和其他语言写的代码进行交互。使得在java虚拟机内部运行的代码能够与用其它编程语言(如 C、C++和汇编语言)编写的应用程序和库进行交互操作。    一.载入.so文件。     Android应用层的内容都是以jav

2014-11-04 12:44:00 421

原创 Android JNI 开发之NDK环境配置

最近在学习JNI开发,一直苦于环境配置不会,可能是比较愚钝,看了几种windows下环境配置,自己也尝试着配了几次,始终没有配置好。特别是cygwin每次都弄不好,没有大神指导,自己鼓捣了几次,就放弃了。       最近看到一篇NDK环境配置的教程,自己试着配了,最终还是配置好了。写下来记录一下       windows下NDK环境配置,无需cygwin。       第一步:

2014-11-04 12:41:15 637

空空如也

空空如也

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

TA关注的人

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