Android
文章平均质量分 78
zhenjie_chang
这个作者很懒,什么都没留下…
展开
-
Power按键流程分析
从InputManagerService分析我们知道,当按下手机的Power键之后,按键事件会传到InputDispatcher 的notifyKey 方法,然后调用到调用了NativeInputManager的interceptKeyBeforeQueueing函数,最终在这个函数中会调用到PhoneWindowManager中的interceptKeyBeforeQueueing函数,以上主要原创 2016-09-12 14:01:35 · 5869 阅读 · 0 评论 -
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 · 8100 阅读 · 0 评论 -
Android Doze模式分析
Android 6.0 Doze模式分析Doze模式是Android6.0上新出的一种模式,是一种全新的、低能耗的状态,在后台只有部分任务允许运行,其他都被强制停止。当用户一段时间没有使用手机的时候,Doze模式通过延缓app后台的CPU和网络活动减少电量的消耗。PowerManagerService中也有Doze模式,和此处的Doze模式不一样,其实此处叫Device Idle模式更原创 2016-09-12 15:01:23 · 26660 阅读 · 1 评论 -
BatteryStatsService电池电量统计服务分析
BatteryStatsService主要负责电池电量的统计信息,首先我们简单的看下电量统计服务的启动过程。BatteryStatsService启动过程从BatteryStatsService的启动时序图可以看出,BatteryStatsService服务是在ActivityManagerService服务中启动的1. 在SystemServer中startBoots原创 2016-09-12 14:39:34 · 5941 阅读 · 1 评论 -
BatteryService服务分析
BatteryService是在systemServer启动核心服务的时候启动的。同样我们按照PMS启动的流程来分析BatteryService的启动流程。1.BatteryService的构造方法BatteryService的构造方法比较简单,只是从资源中获取一些预定的值电量统计服务mBatteryStats = BatteryStatsService.getServi原创 2016-09-12 14:22:36 · 5256 阅读 · 0 评论 -
PMS服务之updatePowerStateLocked方法分析
updatePowerStateLocked更新电源的状态,是PowerManagerService的核心方法,当电源状态发生改变最终都会调用到updatePowerStateLocked方法,下面分析这个方法的实现。private void updatePowerStateLocked() { if (!mSystemReady || mDirty == 0) {原创 2016-09-12 10:55:34 · 4005 阅读 · 0 评论 -
Android界面性能分析及优化
性能问题分析主要包括三个方面1.界面渲染2.内存与GC3.电量优化界面渲染大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能我们希望App能够有更多的动画,图片等时尚元素来实现流畅的用 户体验。但是Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染, 如果每次渲染都成功,这样就能够达到原创 2016-09-19 14:04:59 · 2690 阅读 · 0 评论 -
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 · 1070 阅读 · 0 评论 -
ActivityManagerService的启动过程
AMS是Android系统中非常重要的核心服务,负责Activity管理。对于应用中创建的每一个Activity,在ActivityManagerService中都会有一个与之对应的ActivityRecord,这个ActivityRecord记录了应用程序中的Activity的状态。 ActivityManagerService会利用这个ActivityRecord作为标识,对应用程序中的Act原创 2016-12-31 11:44:15 · 1587 阅读 · 0 评论 -
ContentProvider的启动流程分析
ContentProvider是Android系统的四大组件之一,主要用于向外部提供数据。不仅可以向自己应用进程提供数据,也可以向其他进程的提供数据。所以在分析ContentProvider的时候我们首先分析本进程的ContentProvider的启动过程,然后再分析调用其他进程的ContentProvider的时候ContentProvider的安装启动过程。本进程ContentProv原创 2017-03-17 15:51:12 · 4400 阅读 · 0 评论 -
Activity的启动流程分析
Activity是Android应用程序的四大组件之一,负责管理Android应用程序的用户界面,一般一个应用程序中包含很多个Activity,他们可能运行在一个进程中,也可能运行在不同的进程中。我们主要通过启动在不同进程中的Activity,来分析Activity的启动流程及AMS对Activity的管理逻辑。有两个应用程序App1和App2,在App1的Activity A原创 2017-03-17 12:46:19 · 2199 阅读 · 0 评论 -
Service的启动流程分析
我们要启动一个Service服务一般都是在Activity类中直接调用startService(Intent)来启动,而Activity类中并没有相关的方法,我们知道Activity继承自ContextWrapper,ContextWrapper类中的startService方法直接调用了ContextImpl的startService方法。Service的可以在当前的进程中启动,也可以在新的原创 2017-03-17 13:51:34 · 479 阅读 · 0 评论 -
BroadcastReceiver源码分析
Android系统的广播机制是一种基于消息发布和订阅的事件驱动模型,即广播发送者负责发布消息,而接收者需要先订阅消息,才能接收到消息,Android系统中的广播机制是BroadcastReceiver组件。广播接收者需要首先将自己注册,最终他们是将自己注册到了AMS服务中,当广播发送者发送一个广播的时候,首先发送到AMS服务中,然后由AMS服务发送给对应的接收者。BroadCastRe原创 2017-03-17 14:46:04 · 891 阅读 · 0 评论 -
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 · 2252 阅读 · 0 评论 -
PowerManagerService的启动流程
PowerManagerServcie是android系统电源管理的核心服务,它在Framework层建立起一个策略控制方案,向下决策HAL层以及kernel层来控制设备待机状态,控制显示屏,背光灯,距离传感器,光线传感器等硬件设备的状态。向上提供给应用程序相应的操作接口,比如听音乐时持续保持系统唤醒,应用通知来临唤醒手机屏幕等场景等,PMS也是系统的核心服务,启动流程的时序图如下:启动流程时原创 2016-09-12 09:24:36 · 3099 阅读 · 0 评论 -
Android Menu的几种实现方式
android menu实现方式有好几种,有时候容易原创 2014-11-11 17:13:33 · 3130 阅读 · 0 评论 -
Android 开发之Preference
在应用开发中经常用到设置。原创 2014-11-20 19:49:23 · 737 阅读 · 0 评论 -
Android JNI 开发之NDK环境配置
最近在学习JNI开发,一直苦于环境配置不会,可能是比较愚钝,看了几种windows下环境配置,自己也尝试着配了几次,始终没有配置好。特别是cygwin每次都弄不好,没有大神指导,自己鼓捣了几次,就放弃了。 最近看到一篇NDK环境配置的教程,自己试着配了,最终还是配置好了。写下来记录一下 windows下NDK环境配置,无需cygwin。 第一步:原创 2014-11-04 12:41:15 · 635 阅读 · 0 评论 -
Android JNI 知识简介
最近在学习Android JNI的东西,把最近看的东西整理一下 JNI 是本地编程接口,即 Java Native Interface,它允许java代码和其他语言写的代码进行交互。使得在java虚拟机内部运行的代码能够与用其它编程语言(如 C、C++和汇编语言)编写的应用程序和库进行交互操作。 一.载入.so文件。 Android应用层的内容都是以jav转载 2014-11-04 12:44:00 · 413 阅读 · 0 评论 -
HttpClient网络通信
好记心不如烂笔头,今天看书看到这个知识,记录一下 Apache接口的核心功能时HttpClient,与网络有关的功能几乎都要用到HttpClient,我们可以把HttpClient想象成一个浏览器,通过它的API可以很方便的发出get和post请求 在项目中一般讲HttpClient写成单例模式。public class CustomerHttpClient原创 2014-11-04 12:45:57 · 428 阅读 · 0 评论 -
Android 开发之Navigation Drawer
侧滑菜单在Android应用中应用很常见,Android 的API中提供了侧滑菜单,我们可以很方便的将他应用在我们的项目中。那么如何创建一个侧滑菜单呢?创建布局在项目的用户界面的xml布局文件中使用标签,标签必须为xml的根标签。在标签中只能放置两个元素,其中一个放置界面的主要内容,另一个用来放置侧滑菜单。<android.support.v4.widget.DrawerLay原创 2014-12-10 18:25:40 · 614 阅读 · 0 评论 -
Looper和Handler的分析
在写程序的时候我们经常用到handler来进行通信,但是却不太理解Handler的通信机制,今天有机会看了一下,下面来分析一下handler的机制。看到Looper和handler就想起以前写程序的时候常用的几个方法Looper.prepare(),Looper.loop(),Handler的handleMessage(),就先从Looper.prepare()来分析:以下是Looper.原创 2015-01-22 18:06:49 · 631 阅读 · 0 评论 -
将博客搬家至简书
将博客搬至简书原创 2018-09-10 10:48:25 · 1060 阅读 · 2 评论