首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Android源码解析与APP开发技术
看书的小蜗牛
创建于2021-06-15
订阅专栏
从APP开发角度,深入浅出解析源码
等 46 人订阅
共59篇文章
创建于2021-06-15
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Android Bitmap变迁与原理解析(4.x-8.x)
App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在不同的Android版本中,Bitmap或多或少都存在差异,尤其是在其内存分配…
Android wifi上网跟4G上网的区别
首先来看第一个问题,Wifi上网跟4G上网用的是同一块“网卡”吗,答案是否定的,一般而言,Wifi上网用的是以太网卡,拥有48位唯一的MAC地址,而4G上网则通过手机内部的基带模块来实现无线上网的目的。 硬件上的不同,决定了其在软件系统上必定采取不同的适配方式。 而4G流量上网…
Android面试题:bindService获取代理是同步还是异步
执行第二条消息的时候, 会向AMS请求publishService,其实就是告诉AMS,服务启动完毕,可以向之前请求APP端派发代理了。 最后,其实startService也是异步。
LayoutInflater 布局渲染工具原理分析
而PolicyManager进一步调用com.android.internal.policy.impl.Policy对象的makeNewLayoutInflater构建PhoneLayoutInflater。 以上代码就是如何获取资源的, 其中res.getResource并不…
被后台杀死后,Android应用如何重新走闪屏逻辑
Android应用运行在后台的时候,经常被系统的LowMemoryKiller杀掉,当用户再次点击icon或者从最近的任务列表启动的时候,进程会被重建,并且恢复被杀之前的现场。什么意思呢?假如APP在被杀之前的Activity堆栈是这样的,A<B<C,C位于最上层 当用户再次启…
ViewPager刷新问题原理分析及解决方案(FragmentPagerAdapter+FragementStatePagerAdapter)
可见,Fragment的缓存仍旧留在FragmentManager中。新的FragmentPagerAdapter被设置后,会通过instantiateItem函数来获取Fragment,这个时候它首先会从FragmentManager的缓存中去取Fragment,取到的Fra…
十分钟了解Android触摸事件原理(InputManagerService)
从手指接触屏幕到MotionEvent被传送到Activity或者View,中间究竟经历了什么?Android中触摸事件到底是怎么来的呢?源头是哪呢?本文就直观的描述一个整个流程,不求甚解,只求了解。 触摸事件肯定要先捕获才能传给窗口,因此,首先应该有一个线程在不断的监听屏幕,…
理解Android硬件加速的小白文
硬件加速,直观上说就是依赖GPU实现图形绘制加速,同软硬件加速的区别主要是图形的绘制究竟是GPU来处理还是CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。在Android中也是如此,不过相对于普通的软件绘制,硬件加速还做了其他方面优化,不仅仅限定在绘制方面,绘制之前…
Android ContentProvider支持跨进程数据共享与"互斥、同步" 杂谈
在开发中,假如,A、B进程有部分信息需要同步,这个时候怎么处理呢?设想这么一个场景,有个业务复杂的Activity非常占用内存,并引发OOM,所以,想要把这个Activity放到单独进程,以保证OOM时主进程不崩溃。但是,两个整个APP有些信息需要保持同步,比如登陆信息等,无论…
SharePreference原理及跨进程数据共享的问题
SharedPreferences是Android提供的数据持久化的一种手段,适合单进程、小批量的数据存储与访问。为什么这么说呢?因为SharedPreferences的实现是基于单个xml文件实现的,并且,所有持久化数据都是一次性加载到内存,如果数据过大,是不合适采用Shar…
Android内存分配/回收的一个问题-为什么内存使用很少的时候也GC
从上图看到,1,2,3这三个点好像是都发生了GC,但是这个时候,APP内存的占用并不是很高,距离最大内存还有很远,那么这个时候为什么会发生内存GC呢,其实直观上也比较好理解,如果一直等到最大内存才GC,那么就会有两个弊端:首先,内存资源浪费,造成系统性能降低,其次,GC时内存占…
Android窗口管理分析(4):Android View绘制内存的分配、传递、使用
前文Window添加流程中描述了:在添加窗口的时候,WMS会为APP分配一个WindowState,以标识当前窗口并用于窗口管理,同时向SurfaceFlinger端请求分配Layer抽象图层,在SurfaceFlinger分配Layer的时候创建了两个比较关键的Binder对…
Android匿名共享内存(Ashmem)原理
阅读之前,不妨先思考一个问题,在Android系统中,APP端View视图的数据是如何传递SurfaceFlinger服务的呢?View绘制的数据最终是按照一帧一帧显示到屏幕的,而每一帧都会占用一定的存储空间,在APP端执行draw的时候,数据很明显是要绘制到APP的进程空间,…
Android权限检查API checkSelfPermission失效问题
Android6.0之后,权限分为install时的权限跟运行时权限,如果我们的targetSdkVersion>=23,install权限同runtime权限是分开的,app也要针对6.0已经做适配,没什么大问题,无论运行在旧版本还是6.0之后的手机上都ok,这也是Googl…
Android窗口管理分析(3):窗口分组及Z-order的确定
在Android系统中,窗口是有分组概念的,例如,Activity中弹出的所有PopupWindow会随着Activity的隐藏而隐藏,可以说这些都附属于Actvity的子窗口分组,对于Dialog也同样如此,只不过Dialog与Activity属于同一个分组。之间已经简单介绍了…
Android面试官装逼失败之:Activity的启动模式
面试的时候,面试官经常同你随便侃侃Activity的启动模式,但Activity启动牵扯的知识点其实很多,并非能单单用四个启动模式就能概括的,默认的启动模式的表现会随着Intent Flag的设置而改变,因此侃Activity启动模式大多走流程装逼,最多结合项目遇到的问题,随便刁…
Android窗口管理分析(2):WindowManagerService窗口管理之Window添加流程
之前分析说过,WindowManagerService只负责窗口管理,并不负责View的绘制跟图层混合,本文就来分析WMS到底是怎么管理窗口的。初接触Android时感觉:Activity似乎就是Google封装好的窗口,APP只要合理的启动新的Activity就打开了新窗口,这…
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
窗口管理可以说是Android系统中最复杂的一部分,主要是它涉及的模块比较多,虽然说是窗口管理,但除了WindowManagerService还包括SurfaceFlinger服务、Linux的共享内存及tmpfs文件系统、Binder通信、InputManagerService…
获取Android设备DeviceId与反Xposed Hook
APP开发中常需要获取设备的DeviceId,以应对刷单,目前常用的几个设备识别码主要有IMEI(国际移动设备身份码 International Mobile Equipment Identity)或者MEID(Mobile Equipment IDentifier),这两者也是…
Android模拟器识别技术
Android模拟器常常被用来刷单,如何准确的识别模拟器成为App开发中的一个重要模块,目前也有专门的公司提供相应的SDK供开发者识别模拟器。 目前流行的Android模拟器主要分为两种,一种是基于Qemu,另一类是基于Genymotion,网上现在流行用一些模拟器特征进行鉴别…
下一页