自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 电源管理-省电模式-基于android 9

插电状态下,不允许进入省电模式。拔电状态下,手动任意电量进入省电模式,会立即进入省电模式。充电会暂时打断,拔电后会再次进入省电模式,恢复用户的操作终态。拔电状态下,开启自动省电模式,电量低于设置值会自动进入省电模式。自动省电模式状态下,手动进入省电模式会因为重复设置被拦截;手动退出省电模式可以生效,会立即退出省电模式。注意,当重启设备或者充电到自动省电模式边界值以上,再次掉电到边界值以下,还是会自动进入省电模式。

2023-07-20 09:16:42 1029

原创 BuildUtilKt.makeModuleFile

集成kotlin报错信息:Execution failed for task ‘:debug-lib:compileDebugKotlin’.org.jetbrains.kotlin.incremental.BuildUtilKt.makeModuleFile(Ljava/lang/String;ZLjava/io/File;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lan

2021-09-01 10:49:42 183 1

原创 dump heap及分析内存泄漏

服务范围

2021-03-02 19:46:14 7508 2

原创 monkey测试 --kill-process-after-error参数原理解析;android不弹ANR弹窗;ANR时进程被杀重启

背景项目中跑monkey发现anr分析log时,发现进程出现anr时,进程直接被杀掉了,因为需要在anr时抓取内存信息,结果因为进程重启导致抓到的内存信息并不是出问题时的信息。因此研究了一波Android出现anr时的处理逻辑。这里基于mtk平台,部分源码可能有差异。Android ANR触发流程一、ANR后触发dump等操作的代码frameworks/base/services/core/java/com/android/server/am/AppErrors.java接口为appNotResp

2021-02-03 16:44:46 2490 4

原创 Android系统层 性能监控-卡顿监控

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-01-14 14:58:38 4181 4

原创 Could not initialize class org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilder

gradle项目引入kotlin时报错Failed to notify project evaluation listener.Could not initialize class org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageSettingsBuilderKtCould not initialize class org.jetbrains.kotlin.gradle.plugin.sources.DefaultLanguageS

2020-11-20 19:03:44 8819

原创 android gradle spotless自动格式化代码

gradle依赖项目根目录下的build.gradle添加spotless依赖 dependencies { classpath 'com.android.tools.build:gradle:3.2.1' classpath "com.diffplug.spotless:spotless-plugin-gradle:4.3.0" }APP下的build.gradle添加如下代码apply plugin: 'com.diffplug.gradle.s

2020-11-20 14:03:42 2398

原创 android 静默重启 QUIESCENT REBOOT

背景项目中需要处理Android的原生开机动画,一定条件下还需要做到静默重启(android系统启动进入到桌面前,屏幕保持完全没有亮度的状态)。因为项目使用的rom是MTK平台支持,一开始并不知道Android 的QUIESCENT_REBOOT模式,所以自己想办法实现了此功能,详细见博客:基于Q的Android开机动画。因为后续Linux启用了SELinux增强了权限限制,原有的方案因为权限限制了文件的执行和读写,需要进行比较大的变动。后来,学习了下Android 的QUIESCENT_REBOOT模式

2020-10-26 15:12:40 2626

原创 SharedMemory使用,跨进程传输byte数据

背景工作中碰到一个需求,需要跨进程传输图片,项目中使用了android的SharedMemory,这里简单介绍下它的使用。添加此功能的APIAPI level 27类接口参见官方文档https://developer.android.google.cn/reference/android/os/SharedMemory?hl=en跨进程使用(这里以传图片字节为例)一、服务端创建并存入数据: // 1、使用文件流把文件读入到内存 FileInputStream inputStr

2020-10-12 15:23:19 5042 9

转载 性能分析 - Systrace用法入门

性能分析 - Systrace用法入门大佬详细分析systrace系列文章Android Systrace系列文章使用简介systrace工具位置(Ubuntu android sdk目录为例)Android/Sdk/platform-tools/systrace抓取命令:python systrace.py -a **packageName ** -b 32768 -t 8 gfx input view dalvik disk am power res sched freq databas

2020-09-21 15:18:21 585

原创 基于Q的Android开机动画

背景项目中需要处理Android的原生开机动画,一定条件下还需要做到静默重启(android系统启动进入到桌面前,屏幕保持完全没有亮度的状态)。因为项目是基于Android Q做的,顺势探索了一波开机动画的细节。开机动画到底有几个搜了一些资料,推荐一篇博客,原理讲的很细,汇总开机动画一共有三个:Android系统的开机画面显示过程分析总结下:1、Linux内核的启动画面,这个动画一般不显示。2、第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。以小米手机为例,开机出现的第

2020-08-27 18:31:25 1635 2

原创 java.util.ConcurrentModificationException ArrayList

问题日志07-11 22:36:10.067 8431 8431 E AndroidRuntime: FATAL EXCEPTION: main07-11 22:36:10.067 8431 8431 E AndroidRuntime: Process: com.xiaomi.micolauncher, PID: 843107-11 22:36:10.067 8431 8431 E AndroidRuntime: java.util.ConcurrentModificationException07

2020-07-24 18:01:13 474

原创 LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug

使用上下文菜单上下文菜单ContextMenu的使用使用比较简单,可以参考超链接。使用的场景1、EditText的长按快捷操作。2、自定义上下文菜单等。3、WebView中长按快捷菜单。个人遇到的问题在使用WebView过程中,发现长按弹出的菜单,“全选”功能项点击后并没有消失,而EditText点击“全选”后,新弹出的菜单不会再显示全选。最终确定为WebView的bug。长按原理分析解决问题得先研究原理,况且WebView的问题需要更改android源码。首先分析长按的原理。一、首先长

2020-07-20 20:11:54 2634 3

原创 解决Android Studio update issue with jre/bin/java access denied

1、ps -A |grep java 列出所有在运行的java进程2、kill -9 PID 杀掉所有java进程3、重启android studio,再次执行update,就不会提示 jre/bin/java access denied了

2020-07-14 15:48:03 806

原创 registerContentObserver回调两次,ContentObserver回调两次

背景项目中用到了ContentProvider存取数据,同时想动态监听数据变化。使用getContentResolver().registerContentObserver监听。存数据代码Settings.Secure.putInt(getContentResolver(), SECURE_KEY_VOLUME_UP, 1);getContentResolver().notifyChange(Settings.Secure.getUriFor(SECURE_KEY_VOLUME_UP), null)

2020-07-10 11:00:04 4383

原创 AIDL内部对象判等、Binder死亡监听、不死服务实现

背景事情的起因是解决如何判断aidl服务端使用的客户端对象是否为同一个对象。于是引发了asBinder的使用,RemoteCallbackList使用,以及很少使用的IBinder.DeathRecipient。需求场景此篇介绍可以帮助解决aidl使用中的生命周期控制、对象维护以及资源释放,保活服务问题。对象判等当服务端接口有接收客户端aidl定制的对象时,例如维护一个listener列表。你可能需要避免相同对象被重复添加到集合。这个时候需要在服务端接口内对对象执行asBinder操作,此操作返回

2020-07-08 21:15:33 3080

原创 Android如何关联rxJava和lifecycle,避免内存泄露

rxJava的使用rxJava的使用比较复杂,有很多使用技巧。分享一个比较全的介绍:rxJava使用此问题相关的技术1、rxjava compose的使用2、rxjava takeUntil的使用3、lifecycle的使用及原理如何关联rxJava和Lifecycle1、RxJavaLifecycle用来监听生命周期变化并使用BehaviorSubject分发状态 private class RxJavaLifecycle implements LifecycleObserver {

2020-05-28 18:01:04 3118

原创 MVC、MVP、MVVM简介;Android应该如何使用MVVM

背景目前,android流行的MVC、MVP模式的开发框架很多,然而一款基于MVVM模式开发的项目并不多。我们从当前的技术现状出发,分析下如何使用MVVM。Android框架的发展史一、MVC模式1、简介MVC(Model View Controller)一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使...

2020-04-24 15:08:50 421

原创 ViewModel使用,ViewModel源码分析,ViewModel如何保证Activity重建后保存数据

简介ViewModel为Activity或Fragment准备数据,帮助UI处理数据等耗时任务。ViewModel的优点1、 ViewModel当Activity的Configuration变更(例如横竖屏切换)或者各种原因导致的销毁重建时,会自动保留对象,当Activity重建后可立即使用,不需要重新获取数据。2、ViewModel的生命周期避免了内存泄露问题。在Activity.onD...

2020-04-23 18:31:47 1589

原创 LiveData使用、LiveData源码分析

简介LiveData是可观察的数据持有者类。与常规的可观察对象不同,LiveData具有生命周期感知功能,这意味着它尊重其他应用程序组件(例如活动,片段或服务)的生命周期。这种意识确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。LiveData的优点1、确保用户界面与数据状态匹配LiveData遵循观察者模式。Lifecycle对象生命周期状态更改时,LiveData会...

2020-04-22 19:47:04 447

原创 lifecycle使用、lifecycle原理分析、Activity自定义lifecycle

简介Android框架中定义的大多数应用程序组件都具有生命周期。生命周期由进程中运行的操作系统或框架代码管理。它们是Android工作方式的核心,您的应用程序必须尊重它们。否则可能会导致内存泄漏甚至应用程序崩溃。androidx.lifecycle 软件包提供了一些类和接口,使您可以构建生命周期感知的组件,这些组件可以根据活动或片段的当前生命周期状态自动调整其行为。基于AppCompatAc...

2020-04-22 09:40:17 2042

原创 Databinding使用、Databinding原理、Androidx集成Databinding、Databinding源码分析、Databinding双向绑定原理

简介Databinding是谷歌的一个官方支持库,它允许您使用声明性格式而不是通过编程方式将布局中的UI组件绑定到应用程序中的数据源。通常在活动中使用调用UI框架方法的代码来定义布局。例如,调用findViewById()以查找TextView窗口小部件并将其绑定到变量。因为它通过在布局文件中绑定组件,您可以删除活动中的许多UI框架调用,从而使它们更易于维护。这也可以提高应用程序的性能,并有...

2020-04-21 15:57:12 1953 2

原创 Webview如何触发onReceivedLoginRequest;Webview实现自动登录

Webview触发onReceivedLoginRequest这个知识点,我搜索了很多资料,都没确切的提到。以小米手机为例,分析下他的应用原理1、自己写一个app集成Webview,同时需要打开Android的调试模式,调试方式如下:Chrome调试android设备2、WebView启动链接https://www.mi.com/会看到如下页面:3、触发小米商城登录4、使用chr...

2020-04-16 16:26:07 2237 1

原创 Chrome调试android设备

准备条件1、打开手机的usb调试开关1.1 “更多设置”-》“开发者选项” -》“USB调试”1.2 开发版用户找不到开发者选项时,然后重复1.1的步骤2、版本要求Chrome要求 Chrome32及之后版本android要求android4.4及以后版本 3、Chrome连接手机3.1 使用usb线连接pc3.2 在chrome地址栏输入“chrome://inspect”...

2020-04-16 15:48:27 838

原创 Glide升级、Glide适配Androidx、Glide升级到4.11.0

Glide适配Androidx背景项目中使用的Glide版本是3.7.0。因为项目整体要迁移到Androidx,所以开始了一场Glide的大版本升级旅程。官方文档https://muyangmin.github.io/glide-docs-cn/doc/download-setup.html按照官方步骤大体可行,但总是会遇到一些意外情况,比如对于Androidx的兼容问题。兼容Andr...

2020-04-09 10:47:32 10618 3

原创 迁移到Androidx、Androidx依赖包适配、自动引用Androidx包

迁移到AndroidXAndroidX用androidx名称空间中的包替换了原始的支持库API 。仅软件包和Maven工件名称已更改;类,方法和字段名称未更改。先决条件迁移之前,请先更新您的应用程序。我们建议您更新项目以使用支持库的最终版本:版本28.0.0。这是因为版本为1.0.0的AndroidX工件与支持库28.0.0工件是二进制等效的。使用Android Studio迁移现有项目...

2020-04-09 10:17:44 1212

原创 Volley源码及细节剖析

简介Volley是一个HTTP库,可以使Android应用程序的联网更加轻松,最重要的是,它可以更快地联网。Volley在GitHub上可用。源码地址:git clone https://github.com/google/volleyVolley有以下好处:自动安排网络请求。多个并发网络连接。具有标准HTTP 缓存一致性的透明磁盘和内存响应缓存 。支持请求优先级。取消请求API。您...

2020-03-26 19:50:57 172

原创 build.prop 文件编译生成追踪

build.prop是什么在Android系统中有一个类似Windows系统注册表的文件build.prop。这个文件内定义了系统初始(或永久)的一些参数属性、功能的开放等。通过调整/增加参数可以达到调校系统性能偏重点和附加功能开启的作用。编译流程代码路径build/core/Makefile$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $...

2020-03-04 18:34:56 494 1

原创 Java并发编程 一文看懂Callable和Runnable使用及原理

Java并发编程 Callable和Runnable使用及原理背景一、Callable和Runnable二、Runnable在线程中的使用三、Callable在线程中的使用四、Callable&Runnable使用相关类原理解析五、一些不错的代码总结背景安卓开发中很多时候,我们都是选择使用已有框架做异步任务,有些时候,线程一旦启动,不容易终止,此文解析下Runnable和Cal...

2019-12-18 10:18:05 570

原创 git push missing Change-Id in commit message footer

missing Change-Id in commit message footer问题描述从远程仓库clone代码到本地,使用git commit -s提交了change,git push时提示! [remote rejected] review -> refs/for/alpha ([80257fa] missing Change-Id in commit message foot...

2019-11-20 19:18:37 239

原创 Handler、Looper、MessageQueue、Message解析

Handler、Looper、MessageQueue、Message解析Handler相关源码逻辑梳理Handler用法Message合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章...

2019-10-22 18:44:37 283

空空如也

空空如也

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

TA关注的人

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