avatar
文章
86
标签
12
分类
25
Home
Posts
Learn
Note
Categories
Tags
LogoBravestSnail's Blog
Home
Posts
Learn
Note
Categories
Tags

BravestSnail's Blog

Android 应用冻结机制与防冻结方案分析
发表于2025-10-27|noteAndroid
Android 应用冻结机制与防冻结方案分析目录 1. 背景介绍 2. 应用冻结机制详解 2.1 什么是应用冻结 2.2 冻结触发条件 2.3 OOM Adjustment 机制 2.4 冻结流程源码分析 3. 防冻结方案详解 3.1 ContentProvider 方案 3.2 前台服务方案 3.3 省电白名单方案 3.4 Persistent 应用方案 3.5 Service 绑定方案 4. 方案对比与评估 5. 实践建议 6. 参考文献 1. 背景介绍从 Android 11 (API 30) 开始,Android 系统引入了应用冻结 (App Freezing) 机制,作为 Cached App Optimizer 的一部分。该机制旨在通过冻结后台缓存应用来减少系统资源消耗,延长电池续航时间,同时保持应用在内存中以便快速恢复。 问题场景在实际应用中,某些后台服务(如计时器、倒计时小工具)在运行一段时间后会突然停止工作,查看日志发现应用被系统主动冻结: 1ActivityManager: freezing 29669...
Android知识体系
发表于2025-10-27|noteAndroid
JavaJava基础 集合 反射 泛型 异常机制 经典文章常见问题 HashMap讲一下,数据结构、hash过程、扩容、加载因子为何是0.75等。 LRU如何实现的?LinkedHashMap如何实现的?LinkedHashMap是否线程安全?如何实现线程安全?有序还是无序? ThreadLocal干嘛的?用法和原理。 泛型擦除,为何会有擦除?擦除的时机、为何会有协变和逆变 Java并发编程 线程的生命周期 线程池参数及常用线程池 synchronized和volatile区别 经典文章Java并发编程:volatile关键字解析 常见问题JVM JVM内存模型 类加载机制。 类的加载过程(类的生命周期) 经典文章 Java虚拟机(JVM)你只要看这一篇就够了! 常见问题 1、内存回收机制与GC算法(各种算法的优缺点以及应用场景);2、内存泄露场景及避免和解决方法 AndroidAndroid系统 Android平台架构 进程间通信方式 Binder机制 Android系统启动流程 经典文章常见问题: 1、Android系统启动流程 ?2、Jvm、Art 和...
Android 系统属性完全指南
发表于2025-10-27|noteAndroid
Android 系统属性完全指南目录 1. 系统属性概述 2. 系统属性分类 3. 存储机制与持久化 4. 系统属性的生命周期 5. 读取与设置方法 6. 系统更新的影响 7. 常用系统属性详解 8. 实践应用场景 9. 调试技巧 10. 安全与权限 11. 最佳实践 12. 参考资料 版本说明文档版本: 1.1适用 Android 版本: Android 8.0+ (API 26+)最后更新: 2025-01-15 重要提示: 本文档主要基于 Android 8.0+ 的实现,早期版本可能存在差异 不同设备制造商可能对属性系统进行定制 部分功能需要 root 权限或系统签名 实际使用时请根据具体设备和版本进行验证 勘误与更新: 查看 勘误表 了解已知问题和修正 1. 系统属性概述1.1 什么是系统属性Android 系统属性(System Properties)是一个全局的键值对数据库,用于存储和共享系统级别的配置信息。它类似于 Windows 的注册表或 Linux 的 sysctl,但更加轻量级。 核心特性: 键值对结构: key=value...
Compose中的Accompanist
发表于2025-10-27|noteAndroidcompose
accompanist是Jetpack Compose官方提供的一个辅助工具库,以提供那些在Jetpack Compose sdk中目前还没有的功能API。 权限依赖配置: 1234567repositories { mavenCentral()}dependencies { implementation "com.google.accompanist:accompanist-permissions:0.28.0"} 单个权限申请例如,我们需要获取相机权限,可以通过rememberPermissionState(Manifest.permission.CAMERA)创建一个 PermissionState对象,然后通过PermissionState.status.isGranted判断权限是否已获取,并通过调用permissionState.launchPermissionRequest()来申请权限。 12345<manifest...
Compose中的startActivityForResult的正确姿势
发表于2025-10-27|noteAndroidcompose
之前在 Jetpack Compose中的导航路由 里简单的提到了从 Compose 导航到其他 Activity 页面的方式,对于不带返回结果的则就是跟以前一样简单的启动Activity的代码,而如果是startActivityForResult方式的,需要使用带回调的方式去启动,那么在以前,我们要么是使用三方库,要么是自己封装一个简单的库来使用 (至于背后原理也不是什么新鲜事了)...
Compose中的绘制流程和自定义布局
发表于2025-10-27|noteAndroidcompose
Jetpack Compose中绘制流程的三个阶段与大多数其他界面工具包一样,Compose 会通过几个不同的“阶段”来渲染帧。如果我们观察一下 Android View 系统,就会发现它有 3 个主要阶段:测量、布局和绘制。Compose 和它非常相似,但开头多了一个叫做“组合”的重要阶段。 Compose 有 3 个主要的阶段: 组合:要显示什么样的界面。Compose 运行Composable可组合函数并创建LayoutNode视图树。 布局:要放置界面的位置。该阶段包含两个步骤:测量和放置。对于视图树中的每个LayoutNode节点进行宽高尺寸测量并完成位置摆放,布局元素都会根据 2D 坐标来测量并放置自己及其所有子元素。 绘制:渲染的方式。将所有LayoutNode界面元素会绘制到画布(通常是设备屏幕)之上。 这些阶段的顺序通常是相同的,从而让数据能够沿一个方向(从组合到布局,再到绘制)生成帧(也称为单向数据流)。 您可以放心地假设每个帧都会以虚拟方式经历这 3 个阶段,但为了保障性能,Compose...
Compose中的导航路由
发表于2025-10-27|noteAndroidcompose
Jetpack Compose中的导航库是由Jetpack库中的Navigation组件库的基础上添加的对Compose的扩展支持,使用需要单独添加依赖: 1implementation "androidx.navigation:navigation-compose:$nav_version" Jetpack库中的Navigation使用起来还是比较麻烦的,首先需要在xml中进行导航图的配置,然后在代码中使用NavController.navigate(id)进行跳转到指定的id的fragment页面,个人感觉这种方式还是不够灵活,需要预先定义,假如某个fragment没有在xml中定义就无法使用NavController进行跳转,另外还需要在xml和java/kotlin文件来回折腾修改。 Jetpack...
Compose的动画
发表于2025-10-27|noteAndroidcompose
Jetpack Compose中没有沿用Android原有的View动画和属性动画,而是新创建了一套全新的动画系统API,这是理所当然的,因为旧的动画系统主要是基于View体系的,而Compose中需要针对的是Composable可组合函数进行处理,那么势必要创造一套新的玩具出来,同时,这也无疑增加了开发者的学习成本。乍一看Jetpack Compose中的动画Api,尼玛是真的多呀,我C了,简直令人眼花缭乱、云里雾里、天马行空、小兔乱撞、手脚慌乱、头冒虚汗、四肢抓狂、不知所措呀...
Compose的手势操作和事件处理
发表于2025-10-27|noteAndroidcompose
高级事件处理 APICompose 中的手势操作或事件处理全部都是以 Modifier 修饰符的形式提供的,事件处理按照层次可以划分为高级事件处理API和低级事件处理API。 其中高级事件处理API是位于更上层的API,它们都是基于更底层的低级事件处理API实现的,也是开发中比较常用的。高级事件处理API的分类大概如下图所示: 点击事件监听点击事件非常简单,使用 clickable 和 combinedClickable 修饰符即可满足需求: 123456789101112131415161718@OptIn(ExperimentalFoundationApi::class)@Composablefun ClickableExample() { Column{ Box(Modifier .clickable { println("clickable") } .size(30.dp) .background(Color.Red)) ...
Android Tombstone文件分析完全指南:从崩溃日志到根因定位
发表于2025-10-27|noteAndroid问题分析技巧
Android Tombstone文件分析完全指南:从崩溃日志到根因定位前言在Android系统开发中,应用或系统服务的崩溃是不可避免的问题。当崩溃发生时,系统会生成tombstone文件,这些文件包含了崩溃时的详细堆栈信息、内存状态和寄存器值,是定位崩溃根因的宝贵资源。本文将结合实际案例,详细介绍如何分析tombstone文件,快速定位崩溃原因。 什么是Tombstone文件?Tombstone文件是Android系统在进程崩溃时自动生成的调试信息文件,通常位于/data/tombstones/目录下。每个tombstone文件都包含: 崩溃进程的基本信息(PID、进程名、时间戳) 崩溃信号和错误消息 完整的调用堆栈 CPU寄存器状态 内存映射信息 线程信息 获取Tombstone文件方法1:通过ADB获取123456# 获取所有tombstone文件adb shell ls /data/tombstones/adb pull /data/tombstones/ ./# 获取最新的tombstone文件adb shell ls -t /data/tombstones/ |...
1…6789
avatar
BravestSnail
文章
86
标签
12
分类
25
Follow Me
公告
This is my Blog
最新文章
IO模型2025-10-27
Java并发2025-10-27
在U Boot环境下查看U盘文件2025-10-27
wsl代理2025-10-27
Android 系统导航栏模式切换与查询2025-10-27
分类
  • learn15
    • 01 plan7
    • 02 踩坑记录2
    • Java优化3
    • 设计模式2
  • note57
    • Android51
      • BLE1
标签
Java学习 Kotlin Java SharedPreferences Activity Android Handler View LiveData Paging3 PlantUML 问题
归档
  • 十月 2025 73
  • 三月 2023 1
  • 二月 2023 1
  • 九月 2022 2
  • 八月 2022 5
  • 四月 2022 1
  • 三月 2022 2
  • 四月 2020 1
网站信息
文章数目 :
86
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2019 - 2025 By BravestSnail
框架 Hexo 7.3.0|主题 Butterfly 5.3.5