
Android进阶之路
文章平均质量分 96
市面上大量的书籍绝大多数都在重复初级知识,大部分程序员在入门后都是通过博客、论坛、论文等资源进行自学的。这个专栏主要整理一些书本上无法触及的,但是对于Android进阶息息相关的知识点。
BennuCTech
BennuCTech
展开
-
横竖屏切换导致页面频繁重启?详细解读screenLayout
前几天多名用户反馈同一个问题,在小新平板上无法上网课,点击上课按钮后就退回到首页了。同事了解了一下发现小新平板现在销量特别好,于是赶紧申请了一台测试机打算看看到底是什么问题。原创 2023-06-16 15:26:34 · 5269 阅读 · 0 评论 -
Android Jetpack:利用Palette进行图片取色
与产品MM那些事新来一个产品MM,因为比较平,我们就叫她A妹吧。A妹来第一天就指出:页面顶部的Banner广告位的背景是白色的,太单调啦,人家不喜欢啦,需要根据广告图片的内容自动切换背景颜色,颜色要与广告图主色调一致。作为一名合格的码农我直接回绝了,我说咱们的应用主打简洁,整这花里胡哨的干嘛,劳民伤财。A妹也没放弃,与我深入交流了一夜成功说服了我。其实要实现这个需求也不难,Google已经为我们提供了一个方便的工具————Palette。原创 2023-05-04 16:00:29 · 1252 阅读 · 0 评论 -
来详细的聊一聊Android Apk的四代签名
大部分开发者对apk签名还停留在APK v2,对APK v3和APK v4了解很少,而且网上大部分文章讲解的含糊不清,所以根据官网文档重新整理一份。apk签名从APK v1到APK v2改动很大,是颠覆性的,而APK v3只是对APK v2的一次升级,APK v4则是一个补充。原创 2023-04-13 15:07:53 · 1064 阅读 · 0 评论 -
【Android开发】App Bundle技术之动态功能模块
本文并不是介绍Android App Bundle,因为它不是新的事物,相关的文章也有很多了,本文重点介绍的是Android App Bundle中“动态功能模块”的实际应用。原创 2023-04-12 16:59:36 · 2029 阅读 · 0 评论 -
【Jetpack】ActivityResult介绍及原理分析
ActivityResult是Jetpack提供的一个功能,可以简化Activity直接的数据传递(包括权限申请)。它通过提供类型安全的 contract (协定) 来简化处理来自 Activity 的数据。这些协定为一些常见操作 (比如: 拍照或请求权限) 定义了预期的输入和输出类型,除此之外您还能够自定义协定来满足不同场景的需求。原创 2023-04-12 16:16:37 · 1398 阅读 · 0 评论 -
详细解读Android中的事件分发机制
前言Android的事件分发机制也是老生常谈了,这篇文章并不是笼统的介绍这个机制,而是针对ACTION_DOWN这个事件探讨相关的细节。dispatchTouchEvent说到Android事件分发,一定绕不开dispatchTouchEvent函数,View和ViewGroup的该函数有很大的不同。我们来看看ViewGroup的dispatchTouchEvent函数,它的部分源码如下:@Overridepublic boolean dispatchTouchEvent(MotionEvent原创 2021-11-19 15:51:36 · 2324 阅读 · 0 评论 -
【Android开发】事件是如何分发到Activity的?
前言Android事件分发机制大家都非常熟悉,大部分文章对这个过程的描述都是开始于Activity,但是事件是怎么传到Activity的?这里就涉及到几个重要的部分:Window,WMS,ViewRoot和DecorView。如果要理解事件分发的源头,就需要搞明白他们之间的关系,所以我们先来看看它们到底有什么关系?WindowWindow是我们比较熟悉的,那么它是如何创建的?我们来看Activity的attach函数:@UnsupportedAppUsagefinal void attach原创 2021-12-03 09:14:00 · 706 阅读 · 0 评论 -
android中几种定位方式详解
目录前言:1、GPS定位2、NETWORK定位3、AGPS定位4、基站定位5、WIFI定位6、混合定位目前,移动端大致通过三种方式来进行设备定位:GPS、基站、wifi。本文就详细的讲解一下这几种定位方式和实现方法。前言:android中我们一般使用LocationManager来获取位置信息,这里面有四中provider:public static final String NETWORK_PROVIDER = "network";public stat原创 2019-04-19 17:13:00 · 15114 阅读 · 7 评论 -
探讨8.0版本下后台service存活机制及保活
Android进阶之路系列:https://blog.csdn.net/chzphoenix/column/info/16488前段时间时间对targetsdkversion进行升级,结果发现了一个问题:在不升级前,app退出后,后台service可以存活很长一段时间;而升级后,8.0以下版本手机还是一样,但是8.0及以上版本的手机上,app退出一分钟后后台service就被杀...原创 2018-11-20 17:22:56 · 8336 阅读 · 3 评论 -
动态修改android中的资源索引resId
Android进阶之路系列:http://blog.csdn.net/column/details/16488.html一、引言1、为什么要动态修改资源索引一般情况下我们不需要干预资源索引,因为gradle会自动整合项目及所有依赖的资源,再进行相关编译工作,这样资源索引不会冲突。但是如果我们在app中从另外一个apk包中获取代码或资源来使用,就有可能产生冲突。这时候就需要进行动态修改。2、怎么修改......原创 2018-06-05 15:52:33 · 7309 阅读 · 11 评论 -
ListView和GridView的缓存机制及measure过程
Android进阶之路系列:http://blog.csdn.net/column/details/16488.html在Android开发中我们经常使用ListView和GridView,它们都有一套缓存机制,通过复用防止view的不停创建。ListView和GridView都是AbsListView的子类,使用其内部类RecycleBin来进行view的缓存。1、View的Transient状......原创 2018-04-20 10:42:05 · 779 阅读 · 0 评论 -
非UI线程下页面处理:view的postInvalidate和post对消息处理的差异化
Android进阶之路系列:http://blog.csdn.net/column/details/16488.html我们知道view有一系列post方法,用于在非UI线程中发出一些页面处理。view还有另外一个postInvalidate方法,同样在非UI线程中发起重绘。同样是在非UI线程向UI线程发出消息,但是这里面有很大的区别。1、postInvalidate先来看看postInvalid......原创 2018-04-16 11:54:01 · 820 阅读 · 0 评论 -
Bundle/Intent传递序列化参数暗藏杀机
Android进阶之路系列:http://blog.csdn.net/column/details/16488.html前几天一个朋友跟我说了一个诡异且恐怖的事情,有个人用了几行代码就让他们的app歇菜了。这勾起了我极大的兴趣,于是我亲自尝试了一下。代码非常简单,如下:Intent intent = new Intent();intent.setComponent(new ......原创 2018-04-03 10:11:35 · 4998 阅读 · 6 评论 -
探索startActivity流程及在Activity间是如何传递Intent的
Android进阶之路系列:http://blog.csdn.net/column/details/16488.html在activity中intent到底是怎么传递的,而且还可以跨进程甚至跨app来传递,下面我们从源码层面探索一下从startActivity开始,源码如下:@Overridepublic void startActivity(Intent intent) { this.st......原创 2018-03-06 16:24:02 · 6613 阅读 · 0 评论 -
自动规避代码陷阱——自定义Lint规则
一、Lint是什么?Lint 是一款静态代码分析工具,能检查安卓项目的源文件,从而查找潜在的程序错误以及优化提升的方案。当你忘记在Toast上调用show()时,Lint 就会提醒你。它也会确保你的ImageView中添加了contentDescription,以支持可用性。类似的例子还有成千上万个。诚然,Lint 能在诸多方面提供帮助,包括:正确性,安全,性能...原创 2017-12-25 17:40:29 · 3501 阅读 · 4 评论 -
ScrollView内嵌ListView或GridView的滑动处理
开发过程中经常会遇到使用scrollview嵌套listview或gridview的情况,这时由于scrollview拦截消费了滑动事件,所以在listview或gridview区域滑动时该区域无法滑动,而是scrollview整体滑动。正确的处理应该是当焦点在listview或gridview区域该区域滑动,在区域外则scrollview滑动。想要解决这个问题,加上如下代码即可:原创 2017-12-15 17:31:40 · 442 阅读 · 0 评论 -
Android中Intent/Bundle的通信原理及大小限制(Parcelable原理及与Serializable的区别)
我们知道可以通过Intent和bundle在activity或fragment间进行通信,那么这个通信是如何实现的。通过intent的bundle的源码可以看到它们都是实现了Parcelable,其实就是通过序列化来实现通信的。提到Parcelable就不得不提Serializa...原创 2017-12-20 16:19:15 · 7667 阅读 · 2 评论 -
详细分析Android中的引用机制Reference(WeakReference、SoftReference、PhantomReference)
1、前言在java中,我们知道一般情况下当一个对象被其他对象引用时,该对象则不会被回收。但是有时我们虽然需要使用该对象,但又希望不影响回收。比如在Activity中以内部类的方式创建了一个Handler,这个Handler就会隐式的持有一个activity的引用,当这个Handler被一个耗时线程所引用。这时如果关闭这个Activity,由于被引用该Activity及它所持有的引用占用的内...原创 2017-11-28 19:35:09 · 5713 阅读 · 2 评论 -
剖析Fragment的Pause生命周期全过程
近期遇到一个问题,与Fragment的Pause生命周期有关,所以就研究了一下Fragment的Pause生命周期特点。我们知道Fragment的生命周期是依赖Activity的,所以想探究Fragment的Pause过程需要从Activity的Pause下手。在FragmentActivity的onPause可以看到相关代码,如下:@Overrideprotect...原创 2017-08-09 11:41:47 · 1854 阅读 · 1 评论 -
剖析Picasso中的内存缓存机制——LruCache
众所周知,Picasso是一个优秀的Android图片加载库。本篇并不讨论picasso的使用,而是来谈一谈picasso的缓存机制。我们知道,目前主流的图片解决方案大部分都是三级缓存,即内存缓存、本地缓存和服务器缓存。这其中内存和本地缓存是在客户端实现的,picasso中也使用了这种方案。Picasso的本地缓存我们在另外的篇幅中来谈,今天我们重点谈谈picasso的内存缓存。在pi原创 2017-09-05 11:00:24 · 3140 阅读 · 0 评论 -
android中bitmap压缩的几种方法的解读
最近在研究微信的sdk,在缩略图这遇到了一点问题。微信的缩略图要求是不大于32k,这就需要对我的图片进行压缩。试了几种方法,一一道来。1、质量压缩法:代码如下ByteArrayOutputStreambaos=newByteArrayOutputStream();image.compress(Bitmap.Co原创 2014-06-13 09:43:57 · 9310 阅读 · 1 评论 -
实现带header和footer功能的RecyclerView
这个开源项目很简单,其实一年前就开发完成了,但是一直没闲下来去整理。RecyclerView是Android 5.0版本引入的一个新的组件,目的是在一些场景中取代之前ListView和GridView,实现性能更优的解决方案。同时RecyclerView的灵活性让它可胜任更多的场景。关于RecyclerView的使用有太多的文章了,大家可以自行搜索。我们知道RecyclerView很灵活,...原创 2017-08-01 18:39:24 · 1735 阅读 · 0 评论 -
Android App 瘦身总结 第一章 图片资源的优化处理
当一款App经历了大量的迭代后,apk包会越来越臃肿,这里面会存在大量的情况。比如冗余的代码、无用的资源、未合理化处理的图片等等。在经历了疯狂的迭代后,我和我的团队发现再也不能忽视apk大小的问题了,apk的大小已经逼近70M,然而承载的业务量却似乎没有这么多,于是我开始集中精力进行apk瘦身的工作。在一系列调查和研究后,成功让我们两款app瘦身回20M。下面就说说我在瘦身过程中的...原创 2017-07-17 14:08:55 · 9681 阅读 · 1 评论 -
Android App 瘦身总结 第二章 jni动态库及cpu兼容
在前一章主要分析了图片资源部分的优化(http://blog.csdn.net/chzphoenix/article/details/75227590),这一章重点分析jni动态库部分。由于我们的app业务较复杂,存在地图定位、图片处理、第三方浏览器内核等功能,这些功能都不可避免的引入了jni动态库 —— ".so"文件。我们知道jni动态库是用c\c++编写,目的是利用nati原创 2017-07-19 17:33:54 · 1239 阅读 · 0 评论 -
Android App 瘦身总结 第三章 代码混淆及优化
在前两章我们分别从图片资源和jni动态库这两个方面来分析apk瘦身的优化点Android App 瘦身总结 第一章 图片资源的优化处理Android App 瘦身总结 第二章 jni动态库及cpu兼容本章我们从代码角度来继续进行分析。代码是一个app的核心,但是实际上一款应用真正自有的代码在空间占有率并不多(当然像淘宝微信这样的航母级自有代码也一定十分庞大),更多的是各种依原创 2017-07-20 15:43:10 · 1396 阅读 · 0 评论 -
详解Bitmap之ARGB_8888/RGB_565/ALPHA_8/ARGB_4444
有时会看到别人使用bitmap是用到ARGB_8888/RGB_565这类参数,那么这些参数是什么?对bitmap有什么影响?他们是Bitmap.Config的四种枚举类型。(ARGB分别是alpha透明度和red、green、blue三色)ARGB_8888:分别用8位来记录4个值,所以每个像素会占用32位。ARGB_4444:分别用4位来记录4个值,所以每个像素...原创 2014-12-26 16:34:50 · 14917 阅读 · 0 评论 -
Android 8.0 targetsdkversion升级到26填坑
Android进阶之路系列:https://blog.csdn.net/chzphoenix/column/info/16488近期因为应用市场要求,需要将targetsdkversion升级到26之前博客中我们了解过targetsdkversion的重要性,当时我们建议轻易不要改动这个参数。但是这次因为应用市场的硬性要求,我们必须做升级,那么就需要面对升级后带来的兼容性问题。...原创 2019-09-12 14:18:29 · 2312 阅读 · 0 评论