Android
文章平均质量分 85
静默加载
优秀的判断力来自于经验,但经验来自于错误的判断。在看着别人走过的路时,思考怎么走自己的路。无私奉献不是天方夜谈,有时候,我们也可以做到。
展开
-
Plugin [id: ‘org.jetbrains.kotlin.jvm‘, version: ‘1.8.21‘] was not found
Plugin [id: 'org.jetbrains.kotlin.jvm', version: '1.8.21'] was not found in any of the following sources:原创 2023-06-06 17:28:02 · 3569 阅读 · 0 评论 -
实测Android音频的焦点获取和归还
最近老板想在产品中的短视频后者直播播放的时候对于手机中的音乐播放器进行暂停播放,并且退出视频播放后手机的音乐播放器还能继续播放之前的音乐。原创 2022-02-09 09:26:09 · 5211 阅读 · 0 评论 -
从硬件角度去理解协程
从硬件角度理解协程,电脑、主板、cpu、cpu核数、多线程。。。。。协程。原创 2022-02-07 16:19:53 · 1932 阅读 · 0 评论 -
将构建配置从 Groovy 迁移到 KTS
将构建配置从 Groovy 迁移到 KTS前言作为Android开发习惯了面向对象编程,习惯了IDEA提供的各种辅助开发快捷功能。那么带有陌生的常规语法的Groovy脚本对于我来说一向敬而远之。Kotlin DSL的出现感觉是为了我们量身定做的,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。名词概念解释Gradle: 自动化构建工具. 平行产品: Maven.Groovy: 语言, 编译后变为JVM byte code,原创 2021-06-28 19:29:19 · 952 阅读 · 3 评论 -
Gradle自定义Plugin插件和ASM修改字节码
前言先介绍一下 AOP 和 ASM 的概念,AOP 是一种面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。和面向对象编程 的 OOP 相同。ASM 是一个框架可以看作 AOP 的工具,当然 AOP 也有其他工具,比如用的比较多的 AspectJ 、Javassist 、Xposed 和 Dexposed 等。这里我们主要介绍一下在自定义Plugin 使用的 ASM...原创 2020-03-04 16:21:25 · 1398 阅读 · 0 评论 -
Android数据库多线程并发操作异常
在我们做项目的过程中经常会有多线程异步处理的情况,那么Android中多线程操作数据我们一般会遇到什么样的问题?多个数据库对象执行并发指由不同的SQLiteOpenHelper打开的相同数据库对象,默认enableWriteAheadLogging=false。多线程单进程和多进程结果一样。同时进行数据库的读操作不会产生任何问题;如果都需要创建表,那么多次创建可能会出现问题;...原创 2019-11-06 20:47:06 · 2255 阅读 · 0 评论 -
ERROR: Conflicting configuration : ‘arm64-v8a‘ in ndk abiFilters cannot be present when split...
Android 官网通知,从 2019 年 8 月 1 日开始,您在 Google Play 上发布的应用必须支持 64 位架构。64 位 CPU 能够为您的用户提供更快、更丰富的体验。添加 64 位的应用版本不仅可以提升性能、为未来创新创造条件,还能针对仅支持 64 位架构的设备做好准备。按照Android 官网提示进行配置本来很简单的一件事,但是确话费了我好长时间。在这里记录一下这个错误,...原创 2019-10-16 17:22:29 · 9400 阅读 · 5 评论 -
深入解析AIDL的实现:Messenger
Messenger可以翻译为信使,顾名思义,通过它可以在不同进程中传递Message对象,在Message中放入我们需要传递的数据,就可以轻松地实现数据的进程间传递了。Messenger是一种轻量级的IPC方案,它是AIDL在Android中的一种经典实践。文章主要讲述Messenger利用AIDL进行进程间通信,其中不免会涉及到AIDL的知识点。原创 2017-07-10 14:38:33 · 1066 阅读 · 0 评论 -
AsyncTask使用和源码解析
在Android中提起异步通信我们都会想到Handler,之前写过一篇文章[又一年对Android消息机制(Handler&Looper)的思考](http://blog.csdn.net/stven_king/article/details/73730417) 。Android除过使用Handler进行异步任务外,AnsyncTask也是Android原生就有的执行异步任务的关键类。原创 2017-09-17 07:55:11 · 646 阅读 · 0 评论 -
遇见LayoutInflater&Factory
在我们写listview的adapter的getView方法中我们都会通过LayoutInflater.from(mContext)获取LayoutInflater实例然后调用inflate方法创建View。这个有xml布局文件转化为View对象的过程到底是怎么样的,我们今天通过源码来了解一下。原创 2017-11-17 11:18:36 · 1389 阅读 · 0 评论 -
深入理解Activity启动模式之大结局
谈起Activity的启动模式必不可少的要是launchMode、Flags、taskAffinity这三块知识点,上一篇文章 深入理解Activity启动模式之launchMode 看过的同学都知道该文章对launchMode做了非常详细的讲解,所以本片文章承接上一篇文章对剩余的Flags、taskAffinity这两块做讲述。原创 2017-07-20 11:46:06 · 937 阅读 · 0 评论 -
Dialog、Toast的Window和ViewRootImpl
前言文章Activity中的Window的setContentView、遇见LayoutInflater&Factory、ViewRootImpl的独白,我不是一个View(布局篇) 分别讲述了Activity的setContentView添加View、LayoutInflater布局解析以及添加Window。文章内容都是站在Activity的角度来进行代码解析的.....原创 2017-12-11 18:01:51 · 1930 阅读 · 1 评论 -
ViewRootImpl的独白,我不是一个View(布局篇)
前言前一段时间写过两篇关于View的文章 Activity中的Window的setContentView 和 遇见LayoutInflater&Factory 。分析了Activity设置页面布局到页面View元素进行布局到底经历了一个怎么样的过程?原创 2017-12-11 17:56:02 · 14112 阅读 · 7 评论 -
深入理解Activity启动模式之launchMode
Android每个Application都是由若干个四大组件组成的。每个页面都是一个Activity,当需要打开相应页面(Activity)时系统会创建他们的实例并把他们一一放入栈中进行管理。任务栈是一种“后进先出”的栈结构,通过back键,我们可以发现这些Activity会一一出栈(PS:不断返回上一页)。如果每次启动Activity都创建一个实例,会不会很浪费资源?原创 2017-07-20 11:37:04 · 953 阅读 · 0 评论 -
Android:IPC之AIDL的学习和总结
为了使得一个程序能够在同一时间里处理许多用户的要求。即使用户可能发出一个要求,也肯能导致一个操作系统中多个进程的运行(PS:听音乐,看地图)。而且多个进程间需要相互交换、传递信息,IPC方法提供了这种可能。IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)。原创 2016-10-27 17:33:34 · 3365 阅读 · 2 评论 -
又一年对Android消息机制(Handler&Looper)的思考
前言Android消息机制对于每一个Android开发者来说都不陌生,在日常的开发中我们不可避免的要经常涉及这部分的内容。从开发角度来说,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松的将一个任务切换Handler所在的线程中去执行。很多人认为Handler的作用是更新UI,这的确没错,但……原创 2017-06-25 22:37:43 · 1638 阅读 · 1 评论 -
Android之NDK开发初体验
作为Android开发人员,没有接触过NDK开发也接触过so文件吧。其实NDK编程也没有看来的那么隐秘,今天我们来看看咱们利用NDK来写出自己的so文件原创 2017-03-25 00:50:07 · 7563 阅读 · 0 评论 -
Ubuntu14.04创建Genymotion虚拟机
最近工作开发环境有Windows切换到了Ubuntu,以前在Windows环境下使用Genymotion搞Android开发还蛮好用的。那么在Ubuntu环境下桌面创建Genymotion虚拟机呢,今天搞搞试试看~!~!原创 2017-02-13 20:45:42 · 1636 阅读 · 0 评论 -
Ubuntu14.04反编译Apk[试试就知道]
作为Android开发者反编译apk是我们需要掌握的技能,那么在Ubuntu环境下反编译怎么进行Apk的反编译呢?工具dex2jarjd-guidex2jar使用先参照上边提供的地址下载并解压dex2jar然后再使用unzip命令解压apk,我们会在目录下边看到.dex文件执行反编译命令 sh d2j-dex2jar.sh /home/im/Desktop/dex2jar/-debug原创 2017-02-08 21:33:05 · 1526 阅读 · 0 评论 -
Android之Service学习笔记
前言本来想学习学习Binder通信机制,在学习的过程中又接触AIDL并开始学习,在AIDL学习过程中看到bindService,接着就想回顾一下Service的一些知识。希望温故可以知新,也算是年末最后一篇笔记,给自己明年有一个好的开头~!~!原创 2016-12-28 20:50:01 · 1044 阅读 · 0 评论 -
Service之onStartCommand剖析笔记
Service是我们学习Android的基石之一,它在移动应用程序中使用非常广泛。比如应用定位,push消息,内存流量监听等等。 记得大四那年在公司实习的时候,我做的第一个调研就是怎么让接受服务器push的Service不被kill掉(或kill后实现重新启动)。在调研的过程中就了解到如果Service的onStartCommand方法返回值为START_STICKY时。。。。原创 2016-12-28 20:47:51 · 761 阅读 · 0 评论 -
linkToDeath机制了解和使用
往往是由于服务端进程意外停止了,这时我们需要重新连接服务。那么我们可以使用linkToDeath机制,如果使用bindService那么还可以通过ServiceConnection.onServiceDisconnected方法进行重连。原创 2016-12-21 14:14:51 · 13993 阅读 · 0 评论 -
Android换肤原理和Android-Skin-Loader框架解析
前言Android换肤技术已经是很久之前就已经被成熟使用的技术了,然而我最近才在学习和接触热修复的时候才看到。在看了一些换肤的方法之后,并且对市面上比较认可的Android-Skin-Loader换肤框架的源码进行了分析总结。再次记录一下祭奠自己逝去的时间。原创 2017-11-27 19:20:44 · 6945 阅读 · 2 评论 -
Activity中的Window的setContentView
这篇文章距离现在已经两年的时间了。当初自己刚毕业工作不久,才开始接触Android,有一天中午和同事一起吃饭的时候,一个大牛问我你思考过Activity的setContentView是怎么执行的么。当初就因为这个问题我接入到了Android源码。两年时间过去了现在回过头来看,感觉自己写得有很多的不足,本次再补充一下。前言这几天正在进行初级自定义组件的学习,一不小心想到了view到底是怎...原创 2015-10-13 11:00:37 · 2374 阅读 · 0 评论 -
解决6.5.16及以上版本微信内部M页不能唤起APP
背景最近微信唤起app的数据急速下降,产品同学告诉我们大事来了,微信不能唤起Android的App了!!微信语录为提升微信 webivew 中网页打开其他应用的体验,防止诱导点击、强制跳出等不合理行为, 我们的“唤起外部客户端”的能力统一调整为:1、 在 6.5.16 及以上版本的微信客户端中,贵方网页将只能使用 launchApplication 接口,打开其他应用。该接口会在唤...原创 2019-02-21 21:01:24 · 1617 阅读 · 1 评论 -
Android:Base64生产Bitmap压缩和转byte[]
最近在做微信分享的时候遇到了分享图片的大小限制问题,需要对图片进行压缩。在过程中遇到几个有趣的地方在此记录。Bitmap.getByteCount的大小和转化为byte[]的大小差很多不是8倍,而是几十倍,我自测的为67倍压缩Bitmap直接根据长宽比进行调用 createScaledBitmap(@NonNull Bitmap src, int dstWidth, int dstHei...原创 2019-01-07 20:41:55 · 2151 阅读 · 0 评论 -
Android关于微信小程序的唤起和分享
个人博客地址 http://dandanlove.com/最近做了一些有关于微信小程序的项目,涉及了微信小程序的唤起和分享微信小程序。所有的内容都来源于 微信开放平台public class WXProxy { private IWXAPI mShareAPI; /** * 构造为api * @param context 上下文环境 * @pa...原创 2018-11-30 10:57:31 · 2251 阅读 · 2 评论 -
Okhttp拦截器Interceptor学习和使用
前言前年的这个时候我们项目将网络框架替换为okhttp+retrofit ,然后我对 retrofit 源码进行了学习和分享,写了几篇相关的文章同时更新了项目的网络框架。Android网络之Retrofit2.0使用和解析Retrofit2.0中注解使用套路Retrofit2.0+Okhttp不依赖服务端的数据缓存需求是推动任何事物向前发展的动力,这次我们项目需要对网络接口进行加密了,开...原创 2018-11-25 18:20:53 · 12220 阅读 · 0 评论 -
Android更新资源文件浅思考
前言最近在看 《深入探索Android热修复技术原理7.3Q.pdf》 时,遇到一个之前没有注意过的问题:关于资源修更新的Android的版本兼容?作为程序员我们需要非常严谨的思路,是什么导致了资源的修复更新需要做版本兼容?这个问题是使我写下这边文章的原因,下边我们带着问题来找答案!!~!这个问题的解释网上答案比较少,在滴滴的插件化框架相关文章 VirtualAPK 资源篇 和 阿里云移动热...原创 2018-10-27 18:07:54 · 1798 阅读 · 0 评论 -
Multidex记录三:源码解析
个人博客地址 http://dandanlove.com/Multidex记录一:介绍和使用Multidex记录二:缺陷&解决Multidex记录三:源码解析记录Multidex源码解析为什么要用记录呢,因为我从开始接触Android时我们的项目就在65535的边缘。不久Google就出了multidex的解决方案。我们也已经接入multidex好多年,但我自己还没有接入,知其然...原创 2018-10-22 10:57:00 · 1521 阅读 · 0 评论 -
Multidex记录二:缺陷&解决
个人博客地址 http://dandanlove.com/Multidex记录一:介绍和使用Multidex记录二:缺陷&解决Multidex记录三:源码解析记录Multidex缺陷&解决为什么要用记录呢,因为我从开始接触Android时我们的项目就在65535的边缘。不久Google就出了multidex的解决方案。我们也已经接入multidex好多年,但我自己还没有接...原创 2018-10-22 10:55:53 · 1339 阅读 · 0 评论 -
Multidex记录一:介绍和使用
个人博客地址 http://dandanlove.com/Multidex记录一:介绍和使用Multidex记录二:缺陷&解决Multidex记录三:源码解析记录Multidex介绍和使用为什么要用记录呢,因为我从开始接触Android时我们的项目就在65535的边缘。不久Google就出了multidex的解决方案。我们也已经接入multidex好多年,但我自己还没有接入,所以...原创 2018-10-22 10:53:59 · 2635 阅读 · 1 评论 -
Android6.0动态权限适配&XMPermissions
Android6.0动态权限简介从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。它还让用户可以对应用的功能进行更多控制;例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。用户可以随时进入应用的“Settings”屏幕调用权限。摘自And...原创 2018-09-29 18:10:57 · 1525 阅读 · 0 评论 -
Android平台JSON预览(JSON-handle)
Chrome常用的插件JSON-handle,用过的都知道。 最近在做接口加密,所有的数据(request和response)都是加密数据,无法沟通fildder或者Charles抓包查看。那么自己做一个查看json``格式的View:支持动态的放大,缩小,支持所有数据格式~!效果图:GitHub地址: JsonHandleView依赖implementation '...原创 2018-09-10 20:29:26 · 1050 阅读 · 0 评论 -
InstantRun从2.0到3.0,历史解毒
个人博客地址 http://dandanlove.com/InstantRun从2.0到3.0,历史解毒前言Instant Run已经出来3年了,为什么现在会想写这篇文章。从Instant Run 发布就已经有文章做了详细的介绍,但主要分为两类:一类是讲其主要实现原理或是讲 Instant Run2.0中的 Application 和 ClassLoader 的替换,另一类...原创 2018-05-18 15:32:05 · 2676 阅读 · 0 评论 -
Android系统的编舞者Choreographer
个人博客地址 http://dandanlove.com/前言上一篇文章 Android的16ms和垂直同步以及三重缓存 解释了手机流畅性的问题,并在文章中提到了在Android4.1中添加的Vsync。Choreographer机制,用于同Vsync机制配合,实现统一调度界面绘图。Choreographer的构造Choreographer是线程级别的单例,并且具有处理当前线程...原创 2018-04-26 19:59:20 · 6139 阅读 · 0 评论 -
Android动画绘制原理(源码解析)
Android 平台提供了三类动画,一类是 Tween 动画-Animation,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似。最后一种就是3.0之后才出现的属性动画PropertyAnimator。想知道动画与界面渲染与屏幕刷新有着什么样的关系?想知道属性动画为什么会发生内存泄露么?原创 2018-05-01 00:02:16 · 1620 阅读 · 0 评论 -
Android项目解耦--路由框架ARouter源码解析
前言上一篇文章Android项目解耦–路由框架ARouter的使用讲述了ARouter在项目中的使用,这边文章主要对ARouter的源码进行学习和分析。ARouter的结构ARouter主要由三部分组成,包括对外提供的api调用模块、注解模块以及编译时通过注解生产相关的类模块。 arouter-annotation注解的声明和信息存储类的模块 arouter-comp原创 2018-02-06 14:14:42 · 874 阅读 · 1 评论 -
Android项目解耦--路由框架ARouter的使用
Android项目解耦–路由框架ARouter源码解析前言随着业务量的增长,客户端必然随之越来越业务和功能模块耦合越来越生,开发人员代码维护成本越来越高。 App一般都会走向组件化、插件化的道路,而组件化、插件化的前提就是解耦,那么我们首先要做的就是解耦页面之间的依赖关系。原创 2018-02-06 14:16:13 · 1473 阅读 · 0 评论 -
AIDL源码解析in、out和inout
为什么会想写这篇文章,只因为一个error idl.exe E 4928 5836 type_namespace.cpp:130] 'Book' can be an out type, so you must declare it as in, out or inout. 看过上一篇文档的同学都知道这是因为在AIDL文件中使用非常规类型作为参数传递的时候没有标记指向tag。原创 2016-10-27 17:35:59 · 3097 阅读 · 0 评论