1 重点知识
1.1 Alarm
当手机重启或者应用被杀死的时候,Alarm会被删除,因此,如果想通过Alarm来完成长久定时任务是不可靠的,如果非要完成长久定时任务,可以这样:将应用的所有Alarm信息存到数据库中,每次应用启动的时候都重新注册Alarm并更新Alarm的触发时间,通过这种方式就不存在Alarm丢失的情况了。

1.2 Android-N app seinfo设置流程
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
startProcessLocked() {
[…]
Process.ProcessStartResult startResult =
Process.start(entryPoint,
app.processName,
uid, uid, gids,
debugFlags, mountExternal,
app.info.targetSdkVersion,
app.info.seinfo,
requiredAbi, instructionSet,
app.info.dataDir, entryPointArgs);
[…]
}

frameworks/base/core/java/android/os/Process.java
start() {
try {
return startViaZygote(processClass,
niceName,
uid, gid, gids,
debugFlags, mountExternal,
targetSdkVersion, seInfo,
abi, instructionSet,
appDataDir, zygoteArgs);
} catch (ZygoteStartFailedEx ex) {
[…]
}

frameworks/base/core/jni/com_android_internal_os_Zygote.cpp
ForkAndSpecializeCommon() {
[…]
rc = selinux_android_setcontext(
uid, is_system_server,
se_info_c_str, se_name_c_str);
[…]
}

external/libselinux/src/android.c
int selinux_android_setcontext(
uid_t uid,
bool isSystemServer,
const char *seinfo,
const char *pkgname)
{
[…]
}

1.3 Launcher的启动
/* ActivityThread.java */
SystemServer.java
private void startOtherServices() {
[...]
mActivityManagerService.systemReady(
new Runnable() {
});
}

1.4 屏幕永不超时
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
将def_screen_off_timeout的值改成2147483647(0x7fffffff)。

/data/system/users/0/settings_system.xml
adb shell settings put system screen_off_timeout 3600000 #一小时超时

1.5 禁止锁屏
frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java
将mExternallyEnabled的值改成false。

1.6 tmpfs文件系统
mkdir /data/tmp
mount -t tmpfs -o size=100M tmpfs /data/tmp

1.7 apk signer
apk: private key signer
keystore: 密钥库

2 Android异常分析汇总
2.1 Android卡在开机动画
1)AudioFlinger反复重启
2)systemui ANR

2.2 framework反复重启
1)boot_progress|low-level shutdown|am_crash|checkScreenEnabled|ILL_ILLOPN

2.3 no window focus
ViewRootImpl.java
mAttachInfo.mHasWindowFocus = true

Activity中在dispatchKeyEvent()或者dispatchTouchEvent()方法里面,通过反射把mAttachInfo.mHasWindowFocus重置为true,可以解决no window focus。

@Override
public boolean dispatchTouchEvent(@NonNull KeyEvent event) {
try {
ViewParent viewRootImpl =
getWindow().getDecorView().getParent();
Class viewRootImplClass =
viewRootImpl.getClass();

Field mAttachInfoField =
viewRootImplClass.getDeclaredField(
"mAttachInfo");
mAttachInfoField.setAccessible(true);
Object mAttachInfo =
mAttachInfoField.get(viewRootImpl);
Class mAttachInfoClass =
mAttachInfo.getClass();

Field mHasWindowFocusField =
mAttachInfoClass.getDeclaredField(
"mHasWindowFocus");
mHasWindowFocusField.setAccessible(true);
mHasWindowFocusField.set(mAttachInfo,
true);
boolean mHasWindowFocus =
(boolean) mHasWindowFocusField.get(
mAttachInfo);

} catch (Exception e) {
e.printStackTrace();
}

return super.dispatchKeyEvent(event);
}

2.4 dumpsys gfxinfo
使用dumpsys gfxinfo命令可获取128帧的绘制信息,详细包括每一帧绘制的Draw、Process、Execute三个过程的耗时,如果这三个时间总和超过16.6ms即认为发生了卡顿。

2.5 Linux disk usage
查看当前目录下面所有文件夹所占的空间。
du -h -d 1

显示目录和目录下子目录和文件占用磁盘空间的大小。
du -h /data/data

2.6 提取log
import io
import re
import sys,os
import shutil

arg0_proc_name = ''
def print_usage():
print('\nUsage: python ' + arg0_proc_name +
' <DIR> <file_prefix> <match_string>')
print('refer to the below showcases '
'regarding match_string\n')
list = [
'boot_progress|shutdown',
'boot_progress|low-level shutdown|'
'am_crash',
'boot_progress|shutdown|am_crash|'
'bootinfo',
'checkScreenEnabled|ILL_ILLOPN',
'UIWDT',
]

for item in list:
print(' \"' + item + '\"')
print('')

def remove_dir(dir_path):
if os.path.isdir(dir_path):
for file in os.listdir(dir_path):
if (os.path.isdir(dir_path +
os.path.sep + file)):
remove_dir(dir_path +
os.path.sep + file)
else:
os.remove(dir_path +
os.path.sep + file)
os.removedirs(dir_path)

def write_file_string(file, line_string):
h = open(file, 'a+')
h.writelines(line_string)
h.close()

def write_line_string_to_log(src_file,
dst_file, match_string):
line_cnt = 1
fp = io.open(src_file, 'r', encoding='utf-8',
errors='ignore')
for line_string in fp:
if re.findall(match_string, line_string.lower()):
#if re.findall(match_string, line_string.lower(),
#re.I):
write_file_string(
dst_file, str(line_cnt) + ' ' + line_string)
line_cnt += 1

def find_string(dir_path, file_prefix, match_string):
remove_dir(dir_path + os.path.sep + 'my_out')
os.makedirs(dir_path + os.path.sep + 'my_out')

try:
for file in os.listdir(dir_path):
if (os.path.isfile(dir_path + os.path.sep +
file) and \
file.startswith(file_prefix)):
write_line_string_to_log(dir_path +
os.path.sep + file,
dir_path + os.path.sep +
'my_out' + os.path.sep + file,
match_string)
except KeyboardInterrupt:
print('Got ^C exit signal')

def main():
global arg0_proc_name
arg0_proc_name = sys.argv[0]
if sys.argv[0].rfind(os.path.sep) > 0 :
index = sys.argv[0].rfind(os.path.sep)
arg0_proc_name = sys.argv[0][index+1:]

if len(sys.argv) < 4:
print_usage()
sys.exit(0)

print('to be found: ' + sys.argv[2])
find_string(sys.argv[1], sys.argv[2],
sys.argv[3])

if __name__ == '__main__':
main()

3 USB异步API
development/samples/USB/AdbTest
import static java.lang.Integer.toHexString;
Integer.toHexString(USB_VID)

USB gadget state is not attached

MTP/mass_storage
Maybe the USB cable|idVendor=1d6b|idVendor=12d1|usb disconnect|over-current|nearby|wwan0, isUp is:

1) Choose xxx-Domain, then click Create to create a new page BBB under xxx-Domain.
2) Add Link to xxx-Domain, Edit - copy other line to get prefix format - Insert Link - Search BBB.

4 ART
adb shell oatdump --oat-file=/data/dalvik-cache/xxx/xxx.dex

Linux:
readelf -a xxx.dex

5 Abbreviations
Android PMS LI、LIF、LPw、LPr:要想弄明白方法名中的LI、LIF、LPw、LPr的含义,需要先了解PackageManagerService内部使用的两个锁。因为LI、LIF、LPw、LPr中的L,指的是Lock,而后面跟的I和P指的是两个锁,I表示mInstallLock同步锁;P表示mPackages同步锁。LPw、LPr中的w表示writing,r表示reading。LIF中的F表示Freeze。
ILL_ILLOPN:illegal operand
scanDirLI():scanDir Lock mInstallLock

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营Day6 | 哈希表 Part 1

一、今日学习目标 掌握哈希表的核心理论&#xff08;哈希函数、哈希碰撞及解决方法&#xff09;&#xff0c;理解数组、set、map 三种哈希结构的适用场景&#xff0c;并通过「两个数组的交集」「快乐数」「两数之和」三道题目&#xff0c;实战掌握哈希表在快速查找、去重、键值…

5.13.树、森林与二叉树的转换

当使用"孩子兄弟表示法"存储树或森林时&#xff0c;最终会呈现出与二叉树类似的形态&#xff0c;所以树、森林与二叉树之间的转换本质上就是画出采用孩子兄弟表示法存储的树和森林。一."树->二叉树"的转换&#xff1a;1.例一&#xff1a;以上述图片左边…

Spring 核心流程

Spring 核心流程前言一、AbstractApplicationContext#refresh 方法解析1.1 前置1.2 refresh 方法1.2.1 prepareRefresh1.2.2 obtainFreshBeanFactory1.2.3 prepareBeanFactory1.2.4 postProcessBeanFactory1.2.5 invokeBeanFactoryPostProcessors1.2.6 registerBeanPostProcess…

RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用

RS485转Profinet网关与JRT激光测距传感器在S7-1200 PLC系统中的技术解析与应用技术核心&#xff1a;协议转换与数据桥梁在工业自动化系统中&#xff0c;RS485转Profinet网关承担着协议翻译官的角色。以XD-MDPN100型号为例&#xff0c;其本质是将RS485设备的串口数据封装为Profi…

《C++ string 完全指南:string的模拟实现》

string的模拟实现 文章目录string的模拟实现一、浅拷贝和深拷贝1.浅拷贝2.深拷贝3.写时拷贝二、定义string的成员变量三、string的接口实现1.string的默认成员函数&#xff08;1&#xff09;构造函数实现&#xff08;2&#xff09;析构函数实现&#xff08;3&#xff09;拷贝构…

造成服务器内存不足的原因有什么

服务器在日常的运行过程中&#xff0c;会存储大量关于企业重要的数据信息&#xff0c;偶尔会出现内存飙升空间不足的情况&#xff0c;服务器内存作为服务器数据处理和存储的主要空间&#xff0c;异常占用会导致服务器性能降低&#xff0c;影响到企业业务的响应速度&#xff0c;…

JVM、Dalvik、ART垃圾回收机制

一、JVM垃圾回收机制&#xff08;桌面/服务器端&#xff09;1. 核心算法&#xff1a;分代收集新生代回收&#xff08;Minor GC&#xff09;触发条件&#xff1a;Eden区满时触发算法&#xff1a;复制算法&#xff08;Eden → Survivor区&#xff09;过程&#xff1a;存活对象在S…

数学专业转型数据分析竞争力发展报告

一、核心优势拆解&#xff08;1&#xff09;数学能力与数据分析对应关系数学课程数据分析应用场景比较优势说明概率论假设检验设计能准确判断统计显著性阈值实变函数数据质量评估异常值检测的严格性更高线性代数特征工程构建矩阵运算优化模型训练效率&#xff08;2&#xff09;…

JAVA进阶--MySQL

一.MySQL架构连接层:处理客户端连接服务,认证授权相关的操作服务层:最核心的一层&#xff08;核心服务功能&#xff09;,处理sql,包括sql优化,函数调用....存储引擎层:存储引擎是真正负责来操作数据的&#xff08;mysql中数据的存储和提取&#xff09;, mysql中有不同存储引擎,…

【架构】Docker简单认知构建

作为一个之前从来没有接触过Docker的倒霉蛋&#xff0c;想了解学习一下Docker 搜了CSDN和RUNOOB&#xff0c;得到的描述如下&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包…

C++ std::list概念与使用案例

C std::list 概念详解 std::list 是 C 标准模板库&#xff08;STL&#xff09;中的一个双向链表容器。与 vector 和 array 不同&#xff0c;它不保证元素在内存中连续存储&#xff0c;而是通过指针将各个元素连接起来。 核心特性 双向链表结构&#xff1a; 每个元素包含指向前驱…

从0到1学Pandas(六):Pandas 与数据库交互

目录一、数据库基础操作1.1 连接数据库1.2 执行 SQL 查询1.3 创建与修改表结构二、数据导入导出2.1 从数据库读取数据2.2 将数据写入数据库2.3 大数据量处理三、数据库事务处理3.1 事务概念与实现3.2 批量数据更新3.3 错误处理与回滚四、数据库性能优化4.1 查询性能优化4.2 连接…

GitHub 趋势日报 (2025年07月26日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图602Qwen3-Coder573neko527hrms275BillionMail153Win11Debloat115hyperswitch57data…

机器人仿真(2)Ubuntu24.04下RTX5090配置IsaacSim与IsaacLab

目录 一、前言二、电脑配置三、配置步骤3.1 创建Conda环境3.2 安装PyTorch3.3 安装Isaac Sim3.4 安装Isaac Lab 四、总结 一、前言 博主自从去年开始就一直在关注Isaac Lab和Isaac Sim&#xff0c;但是一直以来由于手头设备只有4060&#xff0c;甚至没有达到最低配置16GB显存要…

DaVinci Resolve 19.0(达芬奇)软件安装包下载及详细安装教程|附带安装文件

[软件名称]&#xff1a;ArcGIS [软件大小]&#xff1a;2.99 GB [系统要求]&#xff1a;支持Win7及更高版本 [下载通道]: 迅雷网盘 [下载链接]:高速下载地址 https://pan.xunlei.com/s/VOW9nw-JV99A_7f_5hhpgqO2A1?pwdbufh# ⚠️:先用手机下载迅雷网盘保存到手机中&#xff0c…

Java学习第八十一部分——Shiro

目录 &#x1f4eb; 一、前言提要简介 &#x1f6e1;️ 二、核心功能介绍 ⚙️ 三、核心架构组件 ☕ 四、与Java的关系 ⚖️ 五、与Spring Security对比 &#x1f9e9; 六、典型应用场景 &#x1f48e; 七、总结归纳概述 &#x1f4eb; 一、前言提要简介 Apache Shiro 是…

虚拟机ubuntu20.04共享安装文件夹

ubuntu20.04共享安装文件夹 4.5 共享安装文件夹 将Windows存放安装文件的文件夹共享给虚拟机&#xff0c;如下图操作&#xff1a;如果是在ubuntu20.04中&#xff0c;还需要以下的操作&#xff1a; sudo mkdir /mnt/hgfs 此命令无效 sudo echo ‘vmhgfs-fuse /mnt/hgfs fu…

如何查看电脑后门IP和流量?

你是否也有以下经历&#xff1f;深夜&#xff0c;你的电脑风扇突然狂转&#xff0c;屏幕却一片寂静&#xff1b;每月流量莫名超标&#xff0c;账单高得离谱&#xff1b;鼠标偶尔不听使唤…这些可能不是电脑“闹脾气”&#xff0c;如何一探究竟&#xff1f; 想象一下&#xff1a…

分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测

分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测 目录分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测分类效果基本介绍多策略量子自适应螺旋搜索算法研究摘要1. 引言1.1 研究背景1.2 研究意义1.3 研究目标2. 文…

Android 修改系统时间源码阅读

链接&#xff1a;XRefAndroid - Support Android 16.0 & OpenHarmony 5.0 (AndroidXRef/AospXRef) 这里看的Android 10的代码&#xff0c;选中Android 10&#xff0c;勾选所有工程&#xff0c;搜索DateTimeSettings‌&#xff1a; 看到showTimePicker应该是显示一个设置时…