
Android进阶提升
文章平均质量分 82
小图包
这个作者很懒,什么都没留下…
展开
-
ViewPager2的源码分析
基于RecyclerView实现。这意味着RecyclerView的优点将会被ViewPager2所继承。2.支持竖直滑动。只需要一个参数就可以改变滑动方向。3.支持关闭用户输入。通过setUserInputEnabled来设置是否禁止用户滑动页面。4.支持通过编程方式滚动。通过fakeDragBy(offsetPx)代码模拟用户滑动页面。5.CompositePageTransformer 支持同时添加多个PageTransformer。原创 2023-04-15 23:36:15 · 808 阅读 · 0 评论 -
Android 源码分析 (十一) ContentProvider 启动
ContentProvider (内容提供者) 属于四大组件之一,可以说它是在四大组件中开发者使用率最少的一个,它的作用就是进程间进行数据交互,底层采用 Binder 机制进行进程间通信。下面我们就以分析 ContentProvider 工作流程为主来进行全面分析。原创 2022-04-18 21:36:22 · 2773 阅读 · 0 评论 -
Android包体积优化
包大小的重要性已经不需要多说,包大小直接影响用户的下载,留存,甚至部分厂商预装强制要求必须小于一定的值。APK分析使用 ApkTool 反编译工具分析 APK; 使用AS 2.2之后提供的Analyze APK; 使用 nimbledroid 进行 APK 性能分析Proguard混淆之后,默认会在工程目录 app/build/outputs/mapping/release 下生成一个 mapping.txt 文件,这就是 混淆规则;作用: 瘦身:它可以检测并移除未使用到的类、方法、字原创 2022-04-06 22:34:56 · 2631 阅读 · 1 评论 -
Android 源码分析 (十) 启动广播的发送和接收过程
广播的发送和接收过程广播的发送和接收分为 2 个阶段来分析,通过应用进程到 AMS SystemServer 进程的调用,然后 AMS 所在的进程通知应用进程的调用,下面我们先来分析应用程序进程到 AMSContextImpl 到 AMS 的调用过程广播发送多种类型的广播,比如 无序、有序、粘性广播,这里以最简单的广播无序广播来讲解,也就是发送一个普通广播,它的实现也是在 ContextWrapper 中直接来看 ContextWrapper 的 sendBroadcast 方法,代码如下:原创 2022-01-02 12:34:08 · 3051 阅读 · 0 评论 -
Android源码分析 (九) BroadcastReceiver 注册过程
广播的注册过程首先,想要使用广播就得通过 registerReceiver 方法注册一个广播,最终也是在 Activity 的父类 ContextWrapper 中实现,代码如下://ContextWrapper.java /** * 应用调用注册广播的函数 * @param receiver The BroadcastReceiver to handle the broadcast. * @param filter Selects the Intent broa原创 2022-01-02 11:37:53 · 1718 阅读 · 0 评论 -
Android内存优化工具
整理下Android内存优化常用的几种工具,top命令、adb shell dumpsys meminfo、Memory Profiler、LeakCanary、MAT1. toptop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。$ adb shell top --helpusage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p P原创 2021-12-25 14:57:40 · 3593 阅读 · 0 评论 -
Android 源码分析 (八) bindService 启动
bindService 绑定服务过程我们直接看 ContextWrapper 类中的 bindService 函数//ContextWrapper.javapublic class ContextWrapper extends Context { Context mBase; ... @Override public boolean bindService(Intent service, ServiceConnection conn, int原创 2021-11-14 19:30:40 · 2645 阅读 · 0 评论 -
Android 源码分析 (七) StartService 启动
startService 启动过程ContextImpl 到 AMS 的调用过程当我们在 Activity 中调用 startActivity 函数的时候,点击 startActivity 看源码实现会发现它是在 ContextWrapper 类中实现的。我们继续看 Context 的 startService 实现,代码如下://Context.javapublic abstract class Context { ... @Nullable public ab原创 2021-11-14 13:40:52 · 2377 阅读 · 0 评论 -
Tinker 源码解析-代码修复和资源修复
之前对于热修复的原理了解过,现拿项目中使用的Tinker进行分析,加深理解记忆Tinker 流程图如下Tinker 将 old.apk 和 new.apk 做了 diff,生成一个 patch.dex,然后下发到手机,将 patch.dex 和本机 apk 中的 classes.dex 做了合并,生成新的 classes.dex,然后加载。一Tinker代码修复原理先从ThinkerApplication看public abstract class TinkerAppli.原创 2021-06-24 15:59:59 · 819 阅读 · 1 评论 -
Android的Handler的常见面试问题总结
本文是对常见面试问题的分析,关于Handler的运行机制详细分析见:Android Handler的源码分析常见问题包括:1、Handler是怎么实现切换线程的?2、handler.sendMessage()与handler.post()的区别?3、MessageQueue是怎么增删消息的?4、一个线程可以有几个Handler?几个Looper?几个MessageQueue?5、A Handler发送的消息为什么不会跑到B Handler的handleMessage()方法中?6、简述Th原创 2021-06-04 21:42:46 · 1356 阅读 · 2 评论 -
Android进程间通信方式
一IntentActivity,Service,Receiver 都支持在 Intent 中传递 Bundle 数据,而 Bundle 实现了 Parcelable 接口,可以在不同的进程间进行传输。 Bundle bundle = new Bundle(); bundle.putString("test", "来自A"); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.原创 2021-05-18 16:27:32 · 403 阅读 · 0 评论 -
Android图片加载优化
一直以来Bitmap都是开发中很棘手的问题,这个问题就是传说中的OOM(java.lang.OutofMemoryError - 内存溢出),那么Bitmap为何如此丧失,令无数Android开发者所懊恼?一、Bitmap引发OOM的原因由于每个机型在编译ROM时都设置了一个应用堆内存VM值上限dalvik.vm.heapgrowthlimit,用来限定每个应用可用转载 2017-09-30 11:44:33 · 240 阅读 · 0 评论 -
内存缓存LruCache详解
现在大部分的缓存框架,比如图片加载框架,网络请求框架等都使用三级缓存来提高效率,即内存-文件(SD卡或手机)-网络。对于图片加载来说,就是加载图片的时候首先从内存缓存中取,如果没有再从文件缓存中取,如果文件缓存没有取到,就从网络下载图片并且加入内存和文件缓存。 LruCache是android提供的一个缓存工具类,其算法是最近最少使用算法(Least Recently Used)。它把最近使用原创 2017-09-26 22:20:14 · 811 阅读 · 0 评论 -
跳出自己的舒适区
前言在这个行业,每隔一段时间都会出现新的技术,好焦虑呀,到底该学什么?14年移动开发出现了大量的泡沫,随便一个培训机构培训几个月出来的在北上广都是8k起,现在感觉移动开发工程师供应需求方都要饱和了。招聘公司每天简历都要收到上百封,很多移动开发面试都接不到电话。该怎么办?要学习RN吗?要学习后台吗?在校的准程序员们学习android还合适吗?现在移动端不景气,是不是要学习新的语言,逃离移动端技术转载 2017-09-24 01:07:43 · 1028 阅读 · 0 评论