12 展讯Sprd设置-电池-AppStateInfoCollector.handleProcStateChanged 代码走读

本文主要是介绍12 展讯Sprd设置-电池-AppStateInfoCollector.handleProcStateChanged 代码走读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. AppStateInfoCollector.handleProcStateChanged

重点监听UID状态变化,来改变uid的状态

    // return true: for new app state//     false: for otherspublic boolean reportAppProcStateInfo(String packageName, int uid, int procState) {int userId = UserHandle.getUserId(uid);ArrayMap<String, AppState> mAppStateInfoList = getAppStateInfoList(userId);//update mAppStateInfoListint index = mAppStateInfoList.indexOfKey(packageName);AppState appState = null;boolean ret = true;if (DEBUG) Slog.d(TAG, "- reportAppProcStateInfo() E -");if (index >= 0) {appState = mAppStateInfoList.valueAt(index);// update procStateappState.mProcState = procState;if (uid != appState.mUid) appState.mUid = uid;ret = false;} else {if (DEBUG) Slog.d(TAG, "reportAppProcStateInfo: appName:" + packageName + " uid:" + uid + " is not exist, create it");appState = buildAppState(packageName, userId, Event.NONE);mAppStateInfoList.put(packageName, appState);}return ret;}

2. PowerController.handleProcStateChanged

    private void handleProcStateChanged(String appName, int uid, int procState) {if (DEBUG) Slog.d(TAG, "- handleProcstateChanged() E - packageName:" + appName+ " uid:" + uid + " procState:" + Util.ProcState2Str(procState));if (mAppStateInfoCollector.reportAppProcStateInfo(appName, uid, procState)) {// Note: Bug 698133 appIdle cts fail -->BEG// Ugly: we have to check if doing cts/gts test// is cts/gts test, thencheckCtsGtsTesting(appName);// Note: Bug 698133 appIdle cts fail <--END}

3. PowerController.updateUidStateLocked

    static final int MSG_UID_STATE_CHANGED = 5;switch (msg.what) {...case MSG_UID_STATE_CHANGED:handleProcStateChanged((String)msg.obj, msg.arg1, msg.arg2);break;.../*** Process state of UID changed; if needed, will trigger*/private void updateUidStateLocked(int uid, int uidState) {...//Add for bug 884770 ENDif ((null != appName) ) {msgHandler.sendMessage(msgHandler.obtainMessage(MSG_UID_STATE_CHANGED, uid, uidState, appName));}private void removeUidStateLocked(int uid) {.....if ((null != appName) ) {msgHandler.sendMessage(msgHandler.obtainMessage(MSG_UID_STATE_CHANGED, uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY, appName));...

4. PowerController.IUidObserver.onUidStateChanged

    final private IUidObserver mUidObserver = new IUidObserver.Stub() {@Override public void onUidStateChanged(int uid, int procState, long procStateSeq) throws RemoteException {synchronized (mUidStateLock) {updateUidStateLocked(uid, procState);}mAppStateInfoCollector.updateUidState(uid, procState);}

5. registerUidObserver.(ActivityManager.UID_OBSERVER_PROCSTATE)

    private void registerUidObserver() {try {if (mActivityManager != null)mActivityManager.registerUidObserver(mUidObserver, ActivityManager.UID_OBSERVER_PROCSTATE| ActivityManager.UID_OBSERVER_GONE/*| ActivityManager.UID_OBSERVER_IDLE| ActivityManager.UID_OBSERVER_ACTIVE*/,ActivityManager.PROCESS_STATE_UNKNOWN, null);} catch (RemoteException e) {// ignored; both services live in system_server}}

监听UID变化状态,重点uid隐藏、状态变更

package android.app;@SystemService(Context.ACTIVITY_SERVICE)
public class ActivityManager {/** @hide Flag for registerUidObserver: report changes in process state. */public static final int UID_OBSERVER_PROCSTATE = 1<<0;/** @hide Flag for registerUidObserver: report uid gone. */public static final int UID_OBSERVER_GONE = 1<<1;/** @hide Flag for registerUidObserver: report uid has become idle. */public static final int UID_OBSERVER_IDLE = 1<<2;/** @hide Flag for registerUidObserver: report uid has become active. */public static final int UID_OBSERVER_ACTIVE = 1<<3;/** @hide Flag for registerUidObserver: report uid cached state has changed. */public static final int UID_OBSERVER_CACHED = 1<<4;

这篇关于12 展讯Sprd设置-电池-AppStateInfoCollector.handleProcStateChanged 代码走读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/695198

相关文章

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python实现一键PDF转Word(附完整代码及详细步骤)

《Python实现一键PDF转Word(附完整代码及详细步骤)》pdf2docx是一个基于Python的第三方库,专门用于将PDF文件转换为可编辑的Word文档,下面我们就来看看如何通过pdf2doc... 目录引言:为什么需要PDF转Word一、pdf2docx介绍1. pdf2docx 是什么2. by

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

如何Python使用设置word的页边距

《如何Python使用设置word的页边距》在编写或处理Word文档的过程中,页边距是一个不可忽视的排版要素,本文将介绍如何使用Python设置Word文档中各个节的页边距,需要的可以参考下... 目录操作步骤代码示例页边距单位说明应用场景与高级用China编程途小结在编写或处理Word文档的过程中,页边距是一个

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到