
Android
文章平均质量分 69
Bert.King
这个作者很懒,什么都没留下…
展开
-
处理namespace问题:Namespace not specified for AGP 8.0.0
Gradle升级过程中,遇到的namespace问题原创 2024-11-16 23:08:47 · 572 阅读 · 0 评论 -
ExoPlayer - Failed to initialize OMX.qcom.video.decoder.avc
使用ExoPlayer,遇到的异常:java.lang.IllegalArgumentException: Failed to initialize OMX.qcom.video.decoder.avc原创 2023-11-30 03:15:00 · 1926 阅读 · 1 评论 -
Android关于杀掉进程的方案
在Android开发中,我们有时候会需要主动结束掉进程,比如我们通过会使用killBackgroundProcesses来杀进程,但是真正在使用过程中会遇到一些问题,本文就来探讨一下。原创 2023-11-29 22:45:39 · 1239 阅读 · 0 评论 -
小米手机MIUI优化的影响
对于小米/红米手机的开发者用户,启用MIUI优化会有所不同。这里总结一下,希望能帮助大家。原创 2023-07-29 00:38:20 · 2519 阅读 · 0 评论 -
The project is using an incompatible version of the Android Gradle plugin.
理解 The project is using an incompatible version of the Android Gradle plugin. 发生的原因原创 2023-03-02 19:46:00 · 8702 阅读 · 0 评论 -
Android的adb命令实战篇-1
对于Android开发者而言,ADB命令或多或少都使用过,但是在实际工作中发现周围同学对adb一知半解,了解的不成体系,所以这里特地总结一下自己在工作中常用的一些adb操作,希望能帮助大家。原创 2023-01-01 02:00:00 · 1282 阅读 · 2 评论 -
获取Android签名MD5的方式
Android 签名MD5的获取方式有多种方式。原创 2022-12-03 23:45:00 · 17625 阅读 · 0 评论 -
百度地图有感
生活也许就是这样,多一分经验便少一分幻想,以实际的愉快平衡现实的痛苦。原创 2022-11-24 01:45:00 · 322 阅读 · 0 评论 -
SharedPreferences的分析(一)
正气清白,流于乾坤SharedPreferences是Android开发中经常使用的一种轻量级存储方式。本着『知其然知其所以然』的宗旨,我们来探讨一下SharedPreferences的实现过程。1. 基本知识SharedPreferences是以Key-Value(键值对)的形式进行存储的;SharedPreferences最终存储在xml文件上;SharedPreferences是线程安全的,但不是进程安全的(MODE_MULTI_PROCESS是个鸡肋。)2. 基本框架Share.原创 2022-02-26 22:30:00 · 1642 阅读 · 0 评论 -
Android数据库选择恐惧症
到目前为止,Android可以使用的数据库大概有以下几种:SqliteHelperOrmliteGreenDaoDBFlowRealmObjectBoxRoom…虽然很多优秀的库都已经淹没在历史长河中,但并不能遮盖其曾经的辉煌,But我们只讨论常用的…1. GreenDao 和 ObjectBox 的关系:As we all know, GreenDao 和 ObjectBox 都出自于Square公司。但是在 GreenDao Repo 的使用开头有这样一句话:Che.原创 2022-02-09 18:48:49 · 2234 阅读 · 0 评论 -
深入理解Binder系列 1
Binder 作为Android独有的进程间通信(IPC)方式。值得我们每一个Android开发同学去深入学习。As we all know, Android系统是基于Linux内核开发的. 整个熟悉的Android架构图:进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。Linux作为一款成名已久的操作系统,已经有自己的进程间通信方式。Android为什么没有直接使用Linux的呢?要想回答好这个问题,我们首先要了解Linux系统的IPC方原创 2022-01-18 00:36:02 · 2018 阅读 · 0 评论 -
Gson解析遇到转义的问题
善与恶的相互渗透是自然法则中的常规现象,有些事情不是能用好坏善恶定义的。1. 背景# 原来的JSON字符串是这个的。{ "deviceNo": "lmi", "h5Url": "https://web.xxx.com/info/singleBoard?boardId=10086&ref=setting_product", "nativeUrl": "io://xxx.com/product/detail?id=1731&name=feedback"}采用Gson 的 .原创 2021-07-23 20:17:01 · 1675 阅读 · 0 评论 -
初识字节码框架ASM
使用ASM遇到第一个错误:1. IllegalArgumentException异常主要原因:ASM具体参考自:1. Caused by: java.lang.IllegalArgumentException2. Caused by: java.lang.IllegalArgumentException2.修改JDK版本引起的问题IDEA 'Error:java: 无效的源发行版——解决方案主要原因:电脑安装的JDK版本 和 项目的JDK版本不一致所引起的。...原创 2021-07-07 21:56:22 · 193 阅读 · 0 评论 -
使用Room所遇到的 Execution failed for task ‘:app:kaptDebugKotlin‘
路径窄处,留一步让人走;滋味浓时,减三分请人尝。1. 踩雷项目中使用Room数据库,需要新增操作方法然后就对相应的Dao进行了一些修改,结果是这样的:Execution failed for task ':app:kaptReleaseKotlin'.> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.Invoc.原创 2021-01-12 23:32:44 · 4670 阅读 · 2 评论 -
Could not resolve all dependencies for configuration的解决方案
开口神气散,意动火工寒Android项目中一般都会存在 1个Project的build.gradle 和 n 个 Module的build.gradle.1. 问题来源MPAndroidChart 的集成,如下图所示:今天在这里犯了一个错误,导致出现上面的问题:// 这里要放在Project的build.gradle文件中repositories { maven { url 'https://jitpack.io' }}// 这里大家都知道放在Module的build.g.原创 2020-12-30 22:39:18 · 37901 阅读 · 0 评论 -
RecyclerView不回调RecyclerView.SCROLL_STATE_IDLE的问题
RecyclerView在我们日常开发中,是必不可少的"神器"。有时候我们需要对其滚动过程进行监听,从而进行相应的一些操作。常规操作: mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { .原创 2020-11-20 21:19:06 · 6240 阅读 · 0 评论 -
ExoPlayer在开启循环播放时的尴尬情况
推动历史发展的不是法律,而是金钱. —— JP摩根1. 应用场景视频播放要循环播放,另外要在视频第一遍播放结束时出现某种提示。循环播放:我们可以通过设置setRepeatMode() 进行设置。另外在Player.EventListener的onPlaybackStateChanged(int state) 对播放过程进行监听。具体过程如下: public void onPlaybackStateChanged(int state) { Log.d(TAG, .原创 2020-10-28 21:12:24 · 5086 阅读 · 0 评论 -
ExoPlayer-Study点滴
ExoPlayer-Study点滴伴随着ExoPlayer应用到项目中,如今研究并记录一些日常开发点滴…现在客户端开发中,随着哔哩哔哩的 ijkplayer不再有人维护,业内的播放器大家都会优先考虑Google推出的 ExoPlayer .GSYVideoPlayer是基于两者开发而成的,大家也可以尝试一下。目前爱奇艺,Youtube都是基于 ExoPlayer 封装的,采用Google家的相对有保证。正如标题所言,本项目的主角只有一个:ExoPlayer1. ExoPlayer的概论原创 2020-10-24 22:53:00 · 860 阅读 · 0 评论 -
Android studio 的小技巧
黄河带地,明余旦旦之言;皎日丽天,知我勤勤之意。1. Android studio 提示信息消失过快在Android library中,不能使用switch语句。原因是因为id没有被final所修饰。我们可以通过给View设置Tag或者直接使用if else语句。如下图的提示(一闪而过):解决这个问题的办法:就是点击提示部分,就会在Android studio的底部出现该提示信息。右键还支持Copy。(如下图所示)2. Android studio 3.6+ 找不到R.java文件An.原创 2020-09-29 20:42:37 · 369 阅读 · 0 评论 -
Invoke-customs are only supported starting with Android O (–min-api 26)
是以有非常之人,然后有非常之事;有非常之事,然后立非常之功。夫非常者,固非常人所拟也。2020注定是不平凡的一年,就连新建Android项目都会遇到问题:没错,就是这个错误:Invoke-customs are only supported starting with Android O (–min-api 26)最简单的解决方案:在app/build.gradle文件中,设置编译支持Java 1.8 即可android { ... compileOptions { .原创 2020-09-28 20:15:08 · 230 阅读 · 0 评论 -
Android 多窗口 对于Activity生命周期的影响
不说硬话,不做软事最近公司项目游戏中心需要对视频播放功能进行优化升级,Android端目前最火的播放器那必须是Google家的 ExoPlayer …PS: 哔哩哔哩的 ijkplayer 当年独领风骚,如今不在维护更新,So …进入正题,在探索ExoPlayer的过程中,发现了有趣的现象。在ExoPlayer的Demos中,播放相关的逻辑主要集中在PlayerActivity.java文件中,看到如下 诡异的一幕: ... @Override public void onSt.原创 2020-09-10 22:50:45 · 455 阅读 · 0 评论 -
Java注解系列之5th(完结)
前文提到注解解释器增量的问题,我们知道这分为两种情况:隔离(Isolating)聚合(Aggregating)这两种情况,都还具有 动态(dynamic) 的配置项在开发中,我们如何选择呢?我们今天就来讨论一下。1. 聚合注解解释器(Aggregating annotation processors)顾名思义,这种模式就是将多个源文件聚合为一个或者多个输出文件或者验证信息。1.1 实例探讨这里拿官例说明一下:processor/src/main/java/ServiceRegis原创 2020-08-17 21:20:19 · 387 阅读 · 0 评论 -
Java注解系列之4th
关于注解的增量更新的相关话题1. 背景Starting with Gradle 2.1, it is possible to compile Java incrementally.(Gradle 2.1 支持 Java的增量编译。)Starting with Gradle 4.7, the incremental compiler also supports incremental annotation processing. Annotation processors need to opt i原创 2020-08-17 21:15:29 · 826 阅读 · 0 评论 -
Protocol Buffers ,你了解吗?
已识乾坤大,犹怜草木青由于公司业务发展,需要开发海外版项目,深入了解 Firebase 在此不得不羡慕国外开发者的幸福啊。在国内,我们可能需要集成多家的SDK,而Firebase算是集大成者。Firebase 基于Google基础架构而构建,其提供了登录授权,用户数据分析,数据库,消息推送及性能监测与崩溃报告等功能,详细内容,请移步:Firebase官网今天,在集成 Firebase Crashlytics 崩溃分析报告和 Firebase Performance Monitoring 性能监.原创 2020-07-13 20:58:13 · 603 阅读 · 0 评论 -
使用FastJson解析库的那些事儿
义以为之,礼以行之,逊以出之,信以诚之,为做事之顺道。多少好事,因礼不周,言不逊,信不孚,致生障碍者,比比皆是。FastJson库的Github地址fastjson是阿里巴巴推出的开源JSON解析库,即:解析JSON格式的字符串Java Bean 序列化为JSON字符串;JSON字符串反序列化为Java Bean;下面来主要来谈一下使用FastJson库所遇到的问题:问题1. 序列化Or反序列化的问题1.1 问题描述:在开发中,为了方便往往在生成Java Bean时,.原创 2020-05-29 21:45:10 · 300 阅读 · 0 评论 -
Kotlin的访问权限管理
遇横逆之来而不怒遭变故之起而不惊当非常之谤而不辩原创 2020-04-22 23:12:28 · 3004 阅读 · 0 评论 -
今天拿到小米正式Offer啦
马有千里之程,无骑不能自往;人有冲天之志,非运不能自通;无论多忙,都要抽时间进行学习提高。经历了3轮技术面试,外加部门Leader和HR,总算有惊无险的拿下小米的offer。经过了一周多的时间,正式offer终于审批到手。请允许我兴奋一分钟。这里分享一下个人对于找工作的一些建议:1.能不裸辞尽量不要裸辞因为大公司的流程可能让你心急如焚。有些大厂的简历投递系统从筛选到面试...原创 2020-04-21 21:39:14 · 14817 阅读 · 11 评论 -
RxJava3的CallAdapter
吉人之辞寡,躁人之辞多RxJava + Okhttp + Retrofit 目前仍然是大多数Android项目的网络框架基石。光阴似箭,岁月如梭,Rxjava 推出3.0版本已有时日,遂打算将项目中的RxJava进行升级操作。OkHttp相关库:okhttp库okhttp的日志拦截器Retrofit相关库:Retrofit库retrofit-converters 或者引入...原创 2020-04-20 21:39:32 · 1892 阅读 · 4 评论 -
剖析LeakCanary—— 下篇
不要小看那些信靠上帝的人,祂能借着他们成就大事本篇文章就是为了说明LeakCanary是如何打造Android平台上的内存泄漏监测过程。按照剖析LeakCanary—— 中篇的思路进行展开论述。1. 总览LeakCanary的Android实现过程这里先罗列一些涉及Android平台的具体实现类AndroidWatchExecutor —> WatchExecutorAndr...原创 2020-04-15 23:22:18 · 296 阅读 · 0 评论 -
剖析LeakCanary—— 中篇
为善不见其益,如草里冬瓜,自能暗长;为恶不见其损,如庭前春雪,势必潜消。官网的一句话:千里之堤,溃于蚁穴“A small leak will sink a great ship.” - Benjamin FranklinLeakCanary 这个库,作为Android开发者应该都不会陌生。它的主要作用就是帮助我们找出内存泄漏的地方,帮助我们开发者减少OOM的发生。LeakC...原创 2020-04-14 23:52:30 · 324 阅读 · 0 评论 -
剖析LeakCanary—— 上篇
狭路相逢宜回身,往来都是暂时人。1.吐槽大会今天刚到工位上组内同事跑过来问我,What’s 引用队列? 中午吃饭闲聊时,才知道面试被问住啦。这里根据其描述,大概总结如下:Java中的四种引用类型?并简述一下其区别?平时开发中一般用到哪几种啊?(据实回答,否则分分钟打脸,同事的脸现在还是红的呢 ~2333)了解**引用队列(Reference Queue)**吗?(这都回答不出来...原创 2020-04-14 23:51:23 · 245 阅读 · 0 评论 -
Handler的前世今生——面试篇
言不必当,极口称是,未交此人,故意底毁;卑庸可耻,不足与论事。——《冰鉴》1. 背景2020年注定是不平凡的一年,“金三银四”怕是被疫情给变了性质,希望面试者都能进入自己心仪的公司。今天面试了一个5年左右的Android开发者,感觉java基础和Android知识都比较不错。在面试Android岗位时,Handler总是绕不开的一个话题 (PS:如果一切顺利,就不存在这篇文章啦)...原创 2020-04-13 23:25:49 · 261 阅读 · 0 评论 -
Android 系统探索1 —— 进程
进程 对于我们计算机相关专业毕业的人而言,显得陌生而又熟悉。因为大学的时候操作系统 这本课程中 最核心的部分就是围绕进程展开的。“知恩图报”—— 都已经还给老师啦。一如IT深似海…啊1. 进程的概念操作系统最核心的概念就是进程,其它内容都是围绕着进程展开的。进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.AWAN,计算机...原创 2020-03-26 13:59:51 · 159 阅读 · 0 评论 -
Handler的前世今生——总结篇
通俗地讲,Android中的多线程通信就可以认为是Handler机制。在Handler的整个机制中,我们首先要知道四个部分:MessageMessageQueue;Handler;Looper;Message中的三个重要属性:target —— 绑定Handler的;callback —— Handler 的post()相关方法和Message进行关联的;when —— ...原创 2020-03-24 16:51:13 · 228 阅读 · 0 评论 -
Handler的前世今生5 —— MessageQueue
MessageQueue文档通过前面的文章,我们知道很多操作其实都是MessageQueue来负责:Looper 的loop() 中使用 MessageQueue的next() 方法;Looper的quit()中使用MessageQueue的quit() 方法;Handler中的enqueueMessage() 使用MessageQueue 的enqueueMessage() 方法;...原创 2020-03-24 13:57:53 · 205 阅读 · 1 评论 -
Handler的前世今生4 —— Handler
Handler文档我们使用Handler其实就是就是2个功能:发送消息;处理消息;但是在这之前 ,我们要做好准备工作,那就是必须得有Looper和MessageQueue才行。Handler就类似一个快递站,如果你没有对应的 运输设备(Looper) 和存储仓库(MessageQueue),就没办法运行啊。1. 使用Handler的前提条件通过源码,我们发现Handler其实...原创 2020-03-23 16:09:41 · 245 阅读 · 0 评论 -
Handler的前世今生3——Message
1. Message的targetMessage文档Each Handler has its own name-space for message codes, so you do not need to worry about yours conflicting with other handlers. 每个Handler都有自己命名空间的消息码,这样不必担心和其它Handler冲突。...原创 2020-03-22 18:24:10 · 222 阅读 · 0 评论 -
Handler的前世今生2——Looper
Handler,MessageQueue,Looper这个铁三角,Handler : 发送和处理消息;MessageQueue :存储消息;Looper:传输消息(MessageQueue —> Handler) ;1. Looper的功能Handler究其本质就是用来实现线程间通信。在Android开发过程中,我们通常在子线程(Thread) 中将消息发送给 主线程(Mai...原创 2020-03-22 15:25:17 · 256 阅读 · 0 评论 -
Handler的前世今生1——ThreadLocal
1.简要有些初级开发者总是认为Handler是用来更新UI的。这从其主要使用场景上讲,是没有问题的。但是要想更好的去了解Handler及其背后的运行机制,这个认识往往会导致对Handler理解的不够深刻,可谓是一叶障目,不见泰山。(PS:我在面试过程中,经常会考察面试者对于Handler的认识)片面认识—— Handler是用来更新UI的。2. 面试迷茫点No Looper; Loop...原创 2020-03-19 12:47:34 · 356 阅读 · 0 评论 -
Android关于Activity的那些事儿
对于Android开发者,Activity那是再熟悉不过了;而今天咱们主要谈一下Activity的主要考察点,帮助大家回顾一下Activity的尘封记忆…Android 官方文档1. Activity的启动模式(launchMode)Activity的任务栈及启动模式standard(默认的):singleTop:singleTask:singleInstance:single...原创 2020-03-16 23:28:24 · 336 阅读 · 0 评论