Android 开发
文章平均质量分 87
移动开发技术栈
Android开发者
展开
-
Android逆向fiddler抓包工具——理解HTTP协议
fiddler左边是抓到包的列表,列表的内容是不断的变化,这是很正常的,因为只要你的电脑与网络进行一次交互,就会进行http抓包.抓包工具有很多,我们在这里主要研究http,因此我们简单的下载一个http的抓包工具即可.进fiddler官网直接在浏览器搜索fiddler即可,记住一定要进官网.怎么辨别官网呢?右下角会有官网网站显示,比如fiddler,页面上会显示与fiddler相关的东西.点进去下载经典版经典版是免费的版本,有这一款填写相关信息进行下载。原创 2023-11-10 17:40:19 · 775 阅读 · 0 评论 -
Android开发,车载通讯应用——binder通讯原理解析
1.从进程间通信的角度看,Binder 是一种进程间通信的机制;2.从 Server 进程的角度看,Binder 指的是 Server 中的 Binder 实体对象;3.从 Client 进程的角度看,Binder 指的是对 Binder 代理对象,是 Binder 实体对象的一个远程代理4.从传输过程的角度看,Binder 是一个可以跨进程传输的对象;Binder 驱动会对这个跨越进程边界的对象对一点点特殊处理,自动完成代理对象和本地对象之间的转换。原创 2023-10-31 16:23:30 · 159 阅读 · 0 评论 -
Lock锁实现,手把手教学
lock的存储结构:一个int类型状态值(用于锁的状态变更),一个双向链表(用于存储等待中的线程)lock获取锁的过程:本质上是通过CAS来获取状态值修改,如果当场没获取到,会将该线程放在线程等待链表中。lock释放锁的过程:修改状态值,调整等待链表。原创 2023-10-27 18:41:02 · 180 阅读 · 0 评论 -
OkHttp网络框架深入理解-SSL握手与加密
由Square公司贡献的一个处理网络请求的开源项目,是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。SSL其实就是Secure Scoket Layer安全套接层,提供了一种为网络通信提供安全以及数据完整性的安全协议,再传输层对网络进行加密。SSL记录协议: 为高层协议提供安全封装,压缩,加密等基本功能SSL握手协议:用与再数据传输开始前进行通信双方的身份验证、加密算法协商、交换秘钥。原创 2023-10-25 16:54:12 · 931 阅读 · 0 评论 -
Android Jetpack重要吧?需要学习有这么多
Jetpack是一种新的架构方式,从工作到现在,经历过了MVC、MVP、MVVM、Clean等,每个项目由于项目特点和需求的不同,都会出现一套基于开发者所设计的架构模式,分层、组件化、模块化,每一种设计都是基于项目所在场景的,很难适合所有项目场景。对于产品,我们在开发中会遇到很多问题,比如:产品交互、用户体验、代码结构、数据获取、数据存储、网络优化、任务调度等等,很多问题还没有很好的解决和优化方案,Jetpack就是Google给出的官方处理方法。大体上,JetPack是Google推出的一些库的集合。原创 2023-10-24 18:16:04 · 71 阅读 · 0 评论 -
Android性能优化,有关内存抖动与解决方案
线程也是造成内存泄露的一个重要源头,线程产生内存泄露的主要原因在于线程生命周期不可控,比如线程是Activity的内部类,则线程对象中保存了Activity的一个引用,当线程的run函数耗时较长没有结束时,线程对象是不会被销毁的,因此它所引用的老的Activity就出现了内存泄漏问题。不正确使用单例模式,也会引起内存泄漏单例对象在初始化后将在JVM的整个生命周期存在(以静态变量方式),如果单例对象持有外部对象的引用,那么这个外部对象就会一直占用着内存,可能导致内存泄漏(取决于这外部对象是否一致有用)。原创 2023-10-10 18:27:26 · 289 阅读 · 0 评论 -
Android APT实现,SqInject的实现原理
APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具,确切的说它是javac的一个工具,它用来在编译时扫描和处理注解。注解处理器以Java代码作为输入,生成.java文件作为输出1、注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解修饰。2、注解对于它所修饰的代码没有直接的影响3、APT原理简介Annotation processing是在编译阶段执行的,它的原理就是读入Java源代码,解析注解,然后生成新的Java代码。原创 2023-10-08 15:20:12 · 187 阅读 · 0 评论 -
android程序中,产生ANR原因与分析解决
在android程序中,所有的输入(key和touch等)事件是由底层的InputDispatcher分发到上层的InputManagerService的,再通过InputManagerService内部的InputMonitor送入WindowManagerService的Policy(PhoneWindowManager)中。可以看到logcat清晰地记录了ANR发生的时间,以及线程的tid和一句话概括原因:WaitingInMainSignalCatcherLoop,大概意思为主线程等待异常。原创 2023-09-06 17:56:23 · 423 阅读 · 0 评论 -
Android中的view绘制流程,简单理解
View是Android中可视化UI组件的实体。View的呈现依赖于Activity,是Activity所容纳的基本元素。View主要提供了组件绘制和事件处理的方法。View可以分为容器类型和实体类型。容器类型的View(ViewGroup)可容纳其它的容器类型View和实体类型View。实体类型的View主要用于用户交互,如:按钮,文本框。《Android核心架构笔记》原创 2023-09-05 18:03:11 · 965 阅读 · 0 评论 -
Android中Handler很重要吗?为什么要学
Handler是Android系统的核心组件,在线程与消息传递中发挥着重要的作用。它可以帮助用户在不同的线程中实现消息的传递和任务的执行,并且提供了许多具有实际用途的方法。使用Handler最根本的目的就是为了解决多线程并发的问题,Android给我们提供这一套更新UI的机制我们只需要遵循这种机制就行了。不用再去关系多线程的问题,所有的更新UI的操作,都是在主线程的消息队列中去轮训的。它把消息发送给Looper管理的MessageQueue,并负责处理Looper分发给他的消息。原创 2023-09-04 17:37:45 · 110 阅读 · 0 评论 -
Android Room数据库LiveData与ViewModel结合使用详解
Android Room是一个强大的数据库持久性解决方案,它简化了数据库访问、提供了类型安全性,并与Android架构组件集成,为Android应用程序的数据管理提供了便利性和可维护性。这让它能成为Android应用程序开发中不可或缺的工具。《Android核心技术手册》原创 2023-09-03 21:51:52 · 586 阅读 · 0 评论 -
Android开发血动脉——Binder机制
Binder是Android中的一个类,它继承了IBinder接口。从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在linux中没有。从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager,etc)和相应ManagerService的桥梁。原创 2023-08-31 17:22:40 · 176 阅读 · 0 评论 -
Android开发——设计一个全局可调用的ViewModel对象
例如,一个购物车的ViewModel对象可以在多个页面中共享,这样可以确保购物车的数据在不同页面中的一致性。通过ViewModel的数据持久性,可以在应用的不同组件之间共享和保持数据的一致性。要设计一个全局可调用的ViewModel对象,可以使用Android Jetpack中的ViewModel和ViewModelProvider来实现。这样,通过ViewModelProvider获取的ViewModel实例将会是同一个对象,可以在整个应用的生命周期内共享。原创 2023-08-30 17:26:29 · 690 阅读 · 1 评论 -
Android网络请求,全方位优雅解析
标准Java接口(java.NET) —-HttpURLConnection,可以实现简单的基于URL请求、响应功能;Apache接口(org.appache.http)—-HttpClient,使用起来更方面更强大。但在android API23的SDK中Google将HttpClient移除了。Google建议使用httpURLconnection进行网络访问操作。原创 2023-08-28 17:36:20 · 1210 阅读 · 0 评论 -
StartUp启动框架-Android启动性能
在 StartUp 框架中,你可以通过设置任务的优先级和管理它们之间的依赖关系来控制任务的执行顺序。为了测量每个初始化任务的执行时间,你可以在每个任务的 create 方法中记录任务开始和结束的时间戳,然后计算时间差。通过使用StartUp框架,你可以更好地管理和优化应用程序的初始化过程,确保关键任务的及时执行,同时延迟初始化不必要的操作,从而提高应用的启动性能。通过使用 StartUp 框架来测量应用的启动性能,你可以更好地理解每个初始化任务的性能影响,从而有针对性地进行优化,提升应用的启动速度。原创 2023-08-27 22:05:19 · 1434 阅读 · 0 评论 -
Android逆向进阶,APK签名问题
V2签名可以提供更好的签名验证性能和安全性,同时还支持增量更新,即只需更新APK文件的部分内容而不需要重新签名整个APK。当用户下载应用时,系统会使用开发者的公钥对签名文件进行解密,并与应用的数字摘要进行比对,以验证应用的完整性和身份。如果您无法获取之前版本的签名密钥或证书,那么您将无法解决签名不一致的问题,这可能需要重新发布一个新的应用。签名过期的问题需要重新签名应用,并使用新的有效证书。签名不一致通常发生在应用升级或安装过程中,当应用的签名与之前版本的签名不匹配时,系统会报告签名不一致的错误。原创 2023-08-22 17:50:43 · 983 阅读 · 0 评论 -
Android资深工程书之LiveData核心组件原理剖析
LiveData是一个可观察的数据持有者,用于在应用程序组件之间共享数据。LiveData具有生命周期感知能力,可以感知应用程序组件的生命周期,并在数据发生变化时通知观察者。LiveData提供了数据转换和操作的方法,如map()和switchMap(),用于对数据进行转换、过滤、组合等操作。LiveData默认在主线程上分发数据更新,以确保数据更新的安全性,同时也提供了postValue()方法,可以在任何线程上更新LiveData的值。原创 2023-08-20 21:40:48 · 485 阅读 · 0 评论 -
Android MVVM架构模式,详详详细学习
在这个示意图中,ViewModel通过数据绑定机制将Model的数据绑定到View上,当Model的数据发生变化时,ViewModel会自动通知View进行更新,从而实现UI的自动刷新。它允许将View中的UI元素(如TextView、EditText)与ViewModel中的数据属性进行绑定,当数据发生变化时,自动更新UI,同时用户的输入也会自动同步到ViewModel中。MVVM模式的数据绑定和观察者模式是实现数据驱动UI的重要手段,未来可能会有更多的框架和工具出现,进一步简化数据和UI的绑定过程。原创 2023-08-18 17:34:41 · 886 阅读 · 0 评论 -
JUC闭锁与AQS技术在启动架构设计中的应用
JUC(Java.util.concurrent)是Java并发编程中的一个重要工具包,其中闭锁(CountDownLatch)是一种多线程同步工具,用于等待其他线程完成某个任务后再继续执行。JUC闭锁在Android应用启动中的作用在Android应用启动的过程中,通常需要进行一些初始化操作,如加载资源、初始化数据库、预加载数据等。这些操作可能会耗费较长的时间,影响应用的启动速度。使用JUC闭锁可以在主线程中等待这些操作完成后再继续执行,从而提高应用的启动速度和用户体验。原创 2023-08-17 17:44:57 · 154 阅读 · 0 评论 -
Android核心开发之——OpenGL
OpenGL是一个跨平台的图形编程接口,用于实现2D和3D图形的渲染和处理。它提供了一系列函数和状态机来操作图形硬件,使开发者能够创建各种复杂的图形效果和交互式应用程序。OpenGL仅仅提供了底层的图形操作接口,开发者需要具备一定的图形学知识和编程技巧,才能充分利用OpenGL的功能。《Android核心技术手册》原创 2023-08-13 21:52:24 · 681 阅读 · 0 评论 -
BpBinder与PPBinder调用过程——Android开发Binder IPC通信技术
本文介绍了Binder IPC通信技术的原理,并详细解析了BpBinder与PPBinder调用过程的使用和注意事项。通过使用BpBinder和PPBinder,我们可以实现跨进程通信,并且可以方便地调用服务端的方法。在使用过程中,需要注意注册Binder对象、传递参数、处理异常等细节。Binder IPC通信技术是Android系统中非常重要的进程间通信技术,对于实现跨进程通信和提高系统性能具有重要意义。《Binder手册》原创 2023-08-08 17:26:38 · 426 阅读 · 0 评论 -
快速修复应用程序中的问题的利器—— Android热修复
热修复技术在Android开发中起着重要的作用,它可以帮助开发者在不需要重新发布应用程序的情况下修复已经上线的应用程序中的问题。本文介绍了热修复技术的基本概念、使用方法以及需要注意的事项。我们通过代码示例演示了热修复技术的具体实现过程,并强调了补丁文件的版本兼容性、安全性、大小和合理性等方面的注意事项。热修复技术的应用可以提高应用程序的稳定性和用户体验,但在使用时需要谨慎操作,确保补丁文件的质量和安全性。《Android核心技术手册》原创 2023-08-06 21:26:25 · 543 阅读 · 0 评论 -
Android Flutter:图文解析 Widget组件生命周期
Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼、腾讯的微信等。今天,我将采用图文方式清晰讲解Flutter中Widget的生命周期,希望你们会喜欢。Flutter里UI控件的统称。通过组合不同的Widget,可以实现用户界面 & 交互。原创 2023-03-09 14:41:06 · 176 阅读 · 0 评论 -
从LiveData迁移到Kotlin的 Flow,才发现是真的香!
LiveData对于 Java 开发者、初学者或是一些简单场景而言仍是可行的解决方案。而对于一些其他的场景,更好的选择是使用Kotlin 数据流 (Kotlin Flow)。虽说数据流 (相较 LiveData) 有更陡峭的学习曲线,但由于它是 JetBrains 力挺的 Kotlin 语言的一部分,且 Jetpack Compose 正式版即将发布,故两者配合更能发挥出 Kotlin 数据流中响应式模型的潜力。此前一段时间,我们探讨了。原创 2023-03-07 20:11:29 · 944 阅读 · 1 评论 -
LiveData 面试题库、解答、源码分析
跨过三道坎后,会将最新的版本号存储在观察者的 mLastVersion 字段中,即版本号除了保存在LiveData.mVersion,还会在每个观察者中保存一个副本mLastVersion,最后才将之前暂存的mData的值分发给数据观察者。LiveData 的值被更新了一次,随后它被添加了一个新的数据观察者,与之绑定组件的生命周期也正好发生了变化(变化到RESUMED),即数据更新在添加观察者之前,此时更新值会被分发到新的观察者吗?而且当新的观察者被注册时,持久的数据会将最新的值分发给它。原创 2023-03-06 19:19:25 · 549 阅读 · 0 评论 -
Android性能优化的底层逻辑
性能优化仿佛成了每个程序员开发的必经之路,要想出人头地,与众不同,你还真需要下点功夫去研究Android的性能优化,比如说,从优化应用启动、UI加载、再到内存、CPU、GPU、IO、还有耗电等等,当你展开一个方面做优化的时候,是不是也曾跟我一样,一头雾水,摸不着头脑,甚至找不到方法,然后看了大量的文章,最后记住了一些别人消化过的方式方法,就觉得自己学会了,其实我现在并不这么认为,我觉得性能优化肯定有一个固定的思维框架,让我们自发的去发现问题,然后解决问题,只有做到了自己发现,这样我们才能跟别人不一样,才能真原创 2023-03-06 15:02:01 · 362 阅读 · 0 评论 -
性能优化|记一次线上OOM问题处理
最近线上监控发现 OOM 涨幅较大,因此去尝试定位和修复这个问题,在修复了一些内存泄漏和大对象占用问题后, OOM 依旧未达到正常标准,在这些新上报的 hprof 文件中,发现几乎所有 case 中都有个叫 FinalizerReference 的对象,数量巨多,内存占用高居首位,因此判断它就是引起本次 OOM 上涨的罪魁祸首。现在开始看看 FinalizerReference 是个啥玩意,知己知彼,才能知道怎么去修它。原创 2023-03-05 21:27:29 · 1249 阅读 · 1 评论 -
Andorid:关于Binder几个面试问题
binder是一种进程间通讯的机制进程间通讯需要了解用户空间和内核空间每个进程拥有自己的独立虚拟机,系统为他们分配的地址空间都是互相隔离的。如两个进程需要进行通讯,则需要使用到内核空间做载体,内核空间是所有进程共享的一块内存区域。而用户空间切到内核空间需要使用到系统api ioctl进行通讯。原创 2023-03-05 20:37:42 · 554 阅读 · 0 评论 -
音视频编解码学习: FFmpeg 的基础知识
FFmpeg 是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案;FFmpeg 的开发是基于 Linux 操作系统的,但是可以在大多数操作系统中编译和使用FFmpeg 支持 MPEG、 DivX、MPEG4、AC3、DV、FLV 等40多种编码,AVI、MPEG、OGG、Matroska、ASF 等90多种解码原创 2022-09-14 17:18:00 · 1593 阅读 · 0 评论 -
面试官直言:有没有 Framework 的项目经验?
特别是有许多的面试官一上来就问我:**有没有Framework相关的项目经验?**当时我就知道这些面试指定是挂了;所以就感觉到自己的技术掌握实在是太差了;其实像上述这位同学的遭遇其实大多数的人都遇到过,但是行业是处于一个进步的状态的;所以现如今;也因此Framework也逐渐成为了衡量Android程序员能力的一个标杆那么想要学习好Framework,就一定对Framework的底层源码要有丰富的了解。...原创 2022-08-14 22:09:00 · 361 阅读 · 0 评论 -
备战金九银十:Android 高级架构师的学习路线及面试题分享
如果大家有觉得自己学习效率低,缺乏正确的指导的,可以参考下面我收集整理的。原创 2022-07-26 19:27:28 · 371 阅读 · 0 评论 -
《2022年 Android 中高级面试题汇总》及答案整理(备战金九银十)
消息机制中有四个关键类,Handler、Message、Looper、MessageQueueLooper的存放使用ThreadLocal实现,ThreadLocal用于创建一个线程的共享变量,当在一个已有Looper的线程中再次创建Looper,会拿到相同的LooperJava有自动回收机制,即GC(Garbage Collection),当jvm判断一个对象已经“无用”了,就会释放其内存;是否“无用”jvm依靠一种引用链的机制判断(弱引用除外,弱引用无论如何都会被回收)只要这个对象在GC Root的引用原创 2022-07-06 21:02:28 · 4212 阅读 · 8 评论