Android
文章平均质量分 73
archie_7
这个作者很懒,什么都没留下…
展开
-
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 · 225 阅读 · 1 评论 -
dump heap及分析内存泄漏
服务范围原创 2021-03-02 19:46:14 · 9434 阅读 · 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 · 2653 阅读 · 4 评论 -
Android系统层 性能监控-卡顿监控
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-01-14 14:58:38 · 4323 阅读 · 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 · 9496 阅读 · 0 评论 -
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 · 2640 阅读 · 0 评论 -
android 静默重启 QUIESCENT REBOOT
背景项目中需要处理Android的原生开机动画,一定条件下还需要做到静默重启(android系统启动进入到桌面前,屏幕保持完全没有亮度的状态)。因为项目使用的rom是MTK平台支持,一开始并不知道Android 的QUIESCENT_REBOOT模式,所以自己想办法实现了此功能,详细见博客:基于Q的Android开机动画。因为后续Linux启用了SELinux增强了权限限制,原有的方案因为权限限制了文件的执行和读写,需要进行比较大的变动。后来,学习了下Android 的QUIESCENT_REBOOT模式原创 2020-10-26 15:12:40 · 3018 阅读 · 0 评论 -
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 · 5671 阅读 · 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 · 641 阅读 · 0 评论 -
基于Q的Android开机动画
背景项目中需要处理Android的原生开机动画,一定条件下还需要做到静默重启(android系统启动进入到桌面前,屏幕保持完全没有亮度的状态)。因为项目是基于Android Q做的,顺势探索了一波开机动画的细节。开机动画到底有几个搜了一些资料,推荐一篇博客,原理讲的很细,汇总开机动画一共有三个:Android系统的开机画面显示过程分析总结下:1、Linux内核的启动画面,这个动画一般不显示。2、第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。以小米手机为例,开机出现的第原创 2020-08-27 18:31:25 · 1776 阅读 · 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 · 581 阅读 · 0 评论 -
LongClick原理、上下文菜单原理、EditText长按弹窗原理、WebView长按弹窗自定义、修复WebView全选重复bug
使用上下文菜单上下文菜单ContextMenu的使用使用比较简单,可以参考超链接。使用的场景1、EditText的长按快捷操作。2、自定义上下文菜单等。3、WebView中长按快捷菜单。个人遇到的问题在使用WebView过程中,发现长按弹出的菜单,“全选”功能项点击后并没有消失,而EditText点击“全选”后,新弹出的菜单不会再显示全选。最终确定为WebView的bug。长按原理分析解决问题得先研究原理,况且WebView的问题需要更改android源码。首先分析长按的原理。一、首先长原创 2020-07-20 20:11:54 · 2772 阅读 · 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 · 871 阅读 · 0 评论 -
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 · 4826 阅读 · 0 评论 -
AIDL内部对象判等、Binder死亡监听、不死服务实现
背景事情的起因是解决如何判断aidl服务端使用的客户端对象是否为同一个对象。于是引发了asBinder的使用,RemoteCallbackList使用,以及很少使用的IBinder.DeathRecipient。需求场景此篇介绍可以帮助解决aidl使用中的生命周期控制、对象维护以及资源释放,保活服务问题。对象判等当服务端接口有接收客户端aidl定制的对象时,例如维护一个listener列表。你可能需要避免相同对象被重复添加到集合。这个时候需要在服务端接口内对对象执行asBinder操作,此操作返回原创 2020-07-08 21:15:33 · 3670 阅读 · 0 评论 -
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 · 3182 阅读 · 0 评论 -
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 · 472 阅读 · 0 评论 -
ViewModel使用,ViewModel源码分析,ViewModel如何保证Activity重建后保存数据
简介ViewModel为Activity或Fragment准备数据,帮助UI处理数据等耗时任务。ViewModel的优点1、 ViewModel当Activity的Configuration变更(例如横竖屏切换)或者各种原因导致的销毁重建时,会自动保留对象,当Activity重建后可立即使用,不需要重新获取数据。2、ViewModel的生命周期避免了内存泄露问题。在Activity.onD...原创 2020-04-23 18:31:47 · 1692 阅读 · 0 评论 -
LiveData使用、LiveData源码分析
简介LiveData是可观察的数据持有者类。与常规的可观察对象不同,LiveData具有生命周期感知功能,这意味着它尊重其他应用程序组件(例如活动,片段或服务)的生命周期。这种意识确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。LiveData的优点1、确保用户界面与数据状态匹配LiveData遵循观察者模式。Lifecycle对象生命周期状态更改时,LiveData会...原创 2020-04-22 19:47:04 · 501 阅读 · 0 评论 -
lifecycle使用、lifecycle原理分析、Activity自定义lifecycle
简介Android框架中定义的大多数应用程序组件都具有生命周期。生命周期由进程中运行的操作系统或框架代码管理。它们是Android工作方式的核心,您的应用程序必须尊重它们。否则可能会导致内存泄漏甚至应用程序崩溃。androidx.lifecycle 软件包提供了一些类和接口,使您可以构建生命周期感知的组件,这些组件可以根据活动或片段的当前生命周期状态自动调整其行为。基于AppCompatAc...原创 2020-04-22 09:40:17 · 2149 阅读 · 0 评论 -
Databinding使用、Databinding原理、Androidx集成Databinding、Databinding源码分析、Databinding双向绑定原理
简介Databinding是谷歌的一个官方支持库,它允许您使用声明性格式而不是通过编程方式将布局中的UI组件绑定到应用程序中的数据源。通常在活动中使用调用UI框架方法的代码来定义布局。例如,调用findViewById()以查找TextView窗口小部件并将其绑定到变量。因为它通过在布局文件中绑定组件,您可以删除活动中的许多UI框架调用,从而使它们更易于维护。这也可以提高应用程序的性能,并有...原创 2020-04-21 15:57:12 · 2128 阅读 · 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 · 2330 阅读 · 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 · 937 阅读 · 0 评论 -
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 · 11401 阅读 · 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 · 1311 阅读 · 0 评论 -
Volley源码及细节剖析
简介Volley是一个HTTP库,可以使Android应用程序的联网更加轻松,最重要的是,它可以更快地联网。Volley在GitHub上可用。源码地址:git clone https://github.com/google/volleyVolley有以下好处:自动安排网络请求。多个并发网络连接。具有标准HTTP 缓存一致性的透明磁盘和内存响应缓存 。支持请求优先级。取消请求API。您...原创 2020-03-26 19:50:57 · 193 阅读 · 0 评论 -
build.prop 文件编译生成追踪
build.prop是什么在Android系统中有一个类似Windows系统注册表的文件build.prop。这个文件内定义了系统初始(或永久)的一些参数属性、功能的开放等。通过调整/增加参数可以达到调校系统性能偏重点和附加功能开启的作用。编译流程代码路径build/core/Makefile$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $...原创 2020-03-04 18:34:56 · 538 阅读 · 1 评论 -
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 · 268 阅读 · 0 评论 -
Handler、Looper、MessageQueue、Message解析
Handler、Looper、MessageQueue、Message解析Handler相关源码逻辑梳理Handler用法Message合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章...原创 2019-10-22 18:44:37 · 364 阅读 · 0 评论