
Android面试
文章平均质量分 86
知识总结,方便准备面试时查阅
西门渔夫
安卓,鸿蒙,多技在手,风风火火闯九州。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android中如何优化RecyclerView的滑动性能?
摘要: Android开发中,优化RecyclerView滑动性能需从布局、数据绑定、图片加载、数据分页和配置五方面入手。布局优化包括减少层级(用ConstraintLayout)、避免过度绘制;数据绑定需避免主线程耗时操作,复用ViewHolder;图片加载应使用异步框架(如Glide)并合理缓存;数据分页通过分批加载和局部刷新(DiffUtil)提升效率;配置优化如设置setHasFixedSize(true)减少测量开销。综合运用这些方法可显著提升列表流畅度。原创 2025-07-22 20:06:25 · 844 阅读 · 0 评论 -
Android中RecyclerView的滑动监听机制
本文介绍了RecyclerView的滑动监听机制,重点解析了OnScrollListener接口的两个核心方法:onScrolled()用于获取滚动方向和距离,onScrollStateChanged()用于监听滚动状态变化。结合LayoutManager提供的可见项位置查询方法,可实现多种实用场景:1)滑动到底部加载更多数据;2)滑动时隐藏/显示导航栏;3)判断是否滑动到顶部以显示"返回顶部"按钮。文章通过代码示例详细说明了如何实现这些功能,为开发者提供了RecyclerView滑动交原创 2025-07-22 20:04:21 · 479 阅读 · 0 评论 -
Android中的ReayclerView的缓存机制与原理
摘要: RecyclerView通过四级缓存机制(Scrap、CacheViews、ViewCacheExtension、RecycledViewPool)实现高性能列表渲染。核心优势在于复用ViewHolder减少创建和绑定开销,提升滚动流畅度。开发者可通过调整缓存大小、共享RecycledViewPool、使用DiffUtil等策略优化性能。相比ListView,RecyclerView提供更精细的缓存控制和内置动画支持,但需注意ViewHolder复用导致的显示异常问题。合理运用缓存机制能显著提升列表原创 2025-07-22 20:02:05 · 996 阅读 · 0 评论 -
Android中广播的注册方式有哪几种?
Android广播接收器(BroadcastReceiver)的注册方式分为静态和动态两种。静态注册在AndroidManifest.xml中声明,应用未启动也能接收广播,适合监听系统事件(如开机启动);动态注册在代码中实现,需手动管理生命周期,灵活性更高,适合组件间通信。从Android 8.0开始,隐式静态广播受到限制。动态注册需注意及时注销避免内存泄漏,应用内通信推荐使用LocalBroadcastManager。根据实际需求选择合适方式:系统级事件用静态注册,UI更新等场景用动态注册。原创 2025-07-22 19:54:24 · 283 阅读 · 0 评论 -
Android中的广播创建与使用场景
Android广播机制是一种全局消息传递方式,支持组件间通信和系统事件监听。主要分为普通广播、有序广播和已废弃的粘性广播三种类型。广播可通过静态(AndroidManifest)或动态(代码注册)方式创建,典型应用场景包括系统事件监听、组件间通信和跨应用交互。虽然广播具有解耦优势,但存在性能开销和安全风险。建议优先使用LocalBroadcastManager、EventBus或ViewModel替代方案,仅在必要时采用全局广播,并注意内存泄漏和耗时操作问题。原创 2025-07-22 19:52:26 · 343 阅读 · 0 评论 -
在Activity和Fragment通信中,哪种方式的效率更高?
摘要:Activity与Fragment通信效率取决于实现方式、数据复杂度及使用场景。接口回调效率最高(0.01ms/次),适合高频简单事件;ViewModel+LiveData(0.1ms/次)适合数据共享;Bundle适用于初始化参数传递;EventBus/LocalBroadcast效率较低(1-10ms/次),仅建议低频解耦场景。优化建议:优先用接口回调/ViewModel,避免EventBus高频使用,采用Parcelable序列化,减少LiveData嵌套。选择时需平衡性能与场景需求,而非单一追原创 2025-07-22 19:48:04 · 757 阅读 · 0 评论 -
Android中Activity与Fragment怎么实现通信?
Android中Activity与Fragment通信的常见方式: 接口回调:Fragment定义接口,Activity实现,在onAttach()中绑定,适合Fragment向Activity单向传值; ViewModel:通过共享ViewModel实现双向通信,支持多Fragment数据同步,推荐使用LiveData观察数据变化; Activity中转:通过getActivity()获取宿主Activity实例,调用公共方法实现Fragment间通信; EventBus:通过事件总线实现松耦合通信,适合原创 2025-07-22 19:45:47 · 672 阅读 · 0 评论 -
Android中自定义View的一般流程
在Android开发中,自定义View是一项重要的技能,它允许开发者创建独特的UI组件或优化现有组件的行为。通过这些步骤,你可以创建出功能丰富、交互流畅的自定义组件。如果继承自ViewGroup,需重写。计算View的宽高,需调用。原创 2025-07-21 12:09:43 · 298 阅读 · 0 评论 -
Android中事件分发中的冲突处理
用于事件的分发,所有的触摸事件都要经过这个方法。:用于判断是否拦截某个事件,只有ViewGroup才有这个方法。:用于处理触摸事件。,即事件从Activity开始,经过Window传递到顶级ViewGroup,然后逐层向下传递,直到找到合适的View处理该事件。通过自定义控件来处理特定的冲突场景。mLastY = y;break;// 如果横向移动距离大于纵向移动距离,则不拦截事件break;原创 2025-07-21 12:02:49 · 683 阅读 · 0 评论 -
Android中的线程池介绍及其使用
除了使用预定义的线程池类型,你还可以通过// 创建一个自定义线程池2, // 核心线程数5, // 最大线程数60, // 线程空闲时间TimeUnit.SECONDS, // 时间单位new ArrayBlockingQueue<>(10) // 任务队列// 提交任务到线程池i < 10;// 关闭线程池。原创 2025-07-21 11:49:24 · 424 阅读 · 0 评论 -
Android中的MVVM框架简介
Android MVVM(Model-View-ViewModel)是一种基于数据绑定和观察者模式的架构模式,用于分离视图(UI)和业务逻辑,提高代码可维护性和可测试性。MVVM是Android开发中一种高效的架构模式,通过分离视图和业务逻辑,提高了代码的可维护性和可测试性。结合LiveData、ViewModel和Data Binding等组件,MVVM能够实现数据驱动的UI更新,减少模板代码,是现代Android应用开发的首选架构之一。原创 2025-07-21 11:28:05 · 1177 阅读 · 0 评论 -
LeakCanary检测内存泄漏的原理
LeakCanary是Square开发的Android/Java内存泄漏检测工具,通过弱引用和引用队列机制监控对象生命周期。当Activity/Fragment销毁后,它主动触发GC并检查对象是否存活,若存活则生成堆转储文件分析引用链。其核心技术包括GC Roots追踪和Shark库分析,能精准定位如静态变量持有Activity、非静态内部类等常见泄漏场景。虽然存在性能开销和误报可能,但在Debug版本中使用能有效提升内存管理质量,建议结合其他工具使用并定期分析报告。该工具实现了内存泄漏检测的自动化与可视化原创 2025-07-21 11:14:19 · 889 阅读 · 0 评论 -
Android性能分析中,如何分析Allocation Count指标来定位内存抖动?
是Memory Profiler中的关键指标,用于统计应用在运行时创建的对象数量。通过分析该指标,可以精准定位内存抖动的根源。建议结合Memory Profiler的其他指标(如内存曲线、GC频率)进行综合分析,以获得更全面的性能优化效果。Allocation Count表示。在Android性能分析中,原创 2025-07-21 11:07:03 · 569 阅读 · 0 评论 -
Android中内存抖动的定位及优化
建议结合Memory Profiler和Allocation Tracker进行问题定位,针对具体场景选择优化方案,最终通过性能测试验证效果。在Android开发中,内存抖动(Memory Churn)是导致应用卡顿甚至崩溃的常见性能问题。下面将详细介绍如何定位和优化内存抖动问题。,通过合理复用对象、优化数据结构和编码习惯,可以有效减少GC压力,提升应用性能。内存抖动的核心问题是。原创 2025-07-21 10:58:57 · 919 阅读 · 0 评论 -
OkHttp 拦截器工作原理
Override// 记录请求信息// 将请求传递给下一个拦截器并获取响应// 记录响应信息.addInterceptor(new LoggingInterceptor()) // 添加应用拦截器.build();拦截器是 OkHttp 最强大的特性之一,通过责任链模式实现了灵活的请求/响应处理机制。合理使用拦截器可以帮助你统一处理日志、认证、缓存、重试等横切关注点,提高代码复用性和可维护性。原创 2025-07-03 10:41:03 · 807 阅读 · 0 评论 -
Android网络请求框架OkHtpp简介
OkHttp 是由 Square 公司开发的一款高效、可靠的 Android 和 Java 网络请求框架,它封装了底层的网络通信细节,提供了简洁易用的 API,广泛应用于移动应用和后端服务的网络请求场景。OkHttp 凭借高效、可靠、易用的特点,成为 Android 开发中网络请求的首选框架之一。无论是简单的 GET 请求,还是复杂的文件上传/下载、断点续传,OkHttp 都能提供良好的支持,同时通过拦截器等机制可灵活扩展功能,满足各种业务需求。原创 2025-07-03 10:38:15 · 770 阅读 · 0 评论 -
Android中synchronized关键字怎么理解?
在Android开发(以及Java体系中),是用于保证的核心关键字,主要作用是实现,避免多个线程同时操作共享资源导致的数据不一致问题。的本质是通过机制,确保同一时间只有一个线程能执行特定代码块(或方法),从而解决多线程环境下的(多个线程同时读写共享资源导致的不可预期结果)。原创 2025-07-03 10:34:33 · 587 阅读 · 0 评论 -
Android中的锁有哪几种?
在Android开发中,锁机制是实现线程安全的核心手段。Java和Android提供了多种锁,适用于不同场景。Lock接口的实现类,提供比更灵活的锁控制。原创 2025-07-03 10:34:05 · 899 阅读 · 0 评论 -
Android同步机制中synchronized和ReentrantLock的区别
在Android和Java开发中,和是两种常用的同步机制,它们都用于实现线程安全,但在底层实现、使用方式和特性上存在显著差异。原创 2025-07-03 10:33:41 · 518 阅读 · 0 评论 -
Android中有哪些同步机制?
在Android开发中,同步机制用于解决多线程并发访问共享资源时的线程安全问题,避免数据不一致、竞态条件等问题。Android基于Java,因此继承了Java的同步机制,同时也有一些特有的扩展。以下是常见的同步机制分类及详细说明:2. 作用:读写分离锁,允许多个读线程同时访问,但写线程独占锁,提高读多写少场景的性能。核心方法::获取读锁(共享锁,多个线程可同时持有)。:获取写锁(排他锁,仅一个线程可持有)。适用场景:缓存、配置文件等读操作远多于写操作的场景。3. 作用:JDK原创 2025-07-03 10:33:14 · 805 阅读 · 0 评论 -
Android开发中推荐Kotlin协程简化同步逻辑
Kotlin协程通过。原创 2025-07-03 10:32:47 · 617 阅读 · 0 评论 -
Android中的四大组件及其作用
四大组件的核心价值在于分工协作Activity负责前台交互,是用户的“脸面”;Service负责后台任务,是应用的“后台引擎”;BroadcastReceiver负责事件通知,是组件间的“信使”;ContentProvider负责数据共享,是应用间的“数据桥梁”。它们通过Intent(意图)进行通信,共同构建了Android应用的功能体系。理解四大组件的作用和生命周期,是开发Android应用的基础。原创 2025-07-02 10:53:50 · 970 阅读 · 0 评论 -
Android系统为什么设计成单线程模型?
这种设计虽然对开发者有一定约束,但显著提高了系统的稳定性和可维护性。原创 2025-07-02 10:14:55 · 188 阅读 · 0 评论 -
Android中ANR的产生及分析处理
当应用在特定时间内无法响应用户输入或系统请求时,系统会弹出ANR对话框(用户可选择“等待”或“关闭应用”)。原创 2025-07-02 11:17:42 · 1198 阅读 · 0 评论 -
Android中对象的引用类型有哪几种?
在Android开发中,对象的引用类型决定了对象的生命周期和垃圾回收(GC)策略。理解不同引用类型的特性,有助于优化内存使用,避免内存泄漏,提升应用性能。原创 2025-07-02 11:22:05 · 670 阅读 · 0 评论 -
Android中volatile关键字怎么理解?
在Android开发中,volatile是一个重要的关键字,用于保证变量的和。理解其原理和适用场景,对编写线程安全的代码至关重要。原创 2025-07-02 11:31:02 · 933 阅读 · 0 评论 -
Android中自定义View的流程
继承View:适用于完全自定义绘制的UI(如自定义图表、特殊形状)。继承现有控件(如TextViewImageView):基于已有功能扩展(如带边框的TextView)。继承ViewGroup:用于自定义布局容器(如流式布局、自定义排列规则的容器)。本文以最基础的**继承View**为例说明。自定义View必须实现至少一个构造方法,用于在代码或XML中创建实例。// 1. 用于在代码中创建(new CustomView(context))init(null);// 初始化操作。原创 2025-07-02 11:03:52 · 848 阅读 · 0 评论 -
怎么理解Android中的Handler机制
Android的Handler机制是实现线程间通信的核心系统,主要用于在子线程中执行耗时操作后,将结果传递到主线程更新UI。其设计核心是消息驱动的异步处理模型,理解它需要掌握以下几个关键组件和工作流程:初始化Looper(主线程无需此步骤)创建Handler发送消息处理消息子线程更新UI定时任务循环任务四、注意事项内存泄漏子线程使用Handler六、总结Handler机制的核心思想是:将耗时操作放在子线程,通过消息队列将结果传递到主线程处理,从而保证UI的流畅性。它原创 2025-07-02 10:25:50 · 686 阅读 · 0 评论 -
Android中的内存泄漏总结
在Android开发中,内存泄漏(Memory Leak)指的是对象无法被垃圾回收器(GC)回收,导致内存持续占用,最终可能引发OOM(OutOfMemoryError)。以下是常见的内存泄漏类型及对应的解决方案:解决方案:使用替代Activity Context。避免在静态变量中存储Activity/Fragment的非静态内部类。2. 非静态内部类/匿名类持有外部类引用原因:非静态内部类(如Handler、Runnable、AsyncTask)会隐式持有外部Activity的引用,原创 2025-07-02 10:39:51 · 609 阅读 · 0 评论 -
Android事件分发机制的原理是什么?
Android的事件分发机制是处理用户触摸(Touch)事件在View层级中传递、拦截和消费的核心机制,其原理基于责任链模式(Chain of Responsibility),通过三层核心方法实现事件的传递与处理。以下是详细的原理解析:事件从Activity开始,通过ViewGroup层层传递,最终到达叶子节点View,形成一个倒置的树状结构:三、核心方法与责任链模式事件分发的核心是三个关键方法的协作:2. Window传递给DecorView3. ViewGroup分发事件4. View处理原创 2025-07-02 11:13:25 · 582 阅读 · 0 评论 -
Android的Handler机制实现线程间通信原理
Handler机制的核心原理是。原创 2025-07-02 10:28:03 · 685 阅读 · 0 评论 -
Android中的事件分发机制简述
Android的事件分发机制是处理用户触摸(Touch)事件在View层级中传递、消耗的核心机制,其流程可概括为从Activity到ViewGroup,再到View的三层传递,最终由合适的View消费事件。以下是关键流程和核心方法:事件从Activity开始,通过ViewGroup层层传递,最终到达叶子节点View,若未被消费则原路返回。2. ViewGroup → 子View3. View处理事件四、关键规则事件传递顺序: → → 。拦截规则:ViewGroup可通过拦截事件,一旦拦原创 2025-07-02 11:10:30 · 254 阅读 · 0 评论 -
Android的Activity启动模式概述
普通页面用standard;栈顶复用用singleTop;栈内去重并清理上方用singleTask;全局唯一独立页面用。合理使用启动模式可提升应用流畅度,避免返回栈混乱或内存浪费。原创 2025-07-02 10:47:24 · 491 阅读 · 0 评论 -
Android中创建Service的方法之比较
类型启动方式生命周期控制适用场景启动式Service需手动调用停止独立后台任务(如下载、后台播放)绑定式Service所有组件解绑后自动停止组件与服务需交互(如实时获取数据)实际开发中,服务可同时支持启动和绑定(既调用又),此时需同时调用和解绑,服务才会销毁。原创 2025-07-02 10:57:40 · 1020 阅读 · 0 评论 -
Android的Handler机制中Looper的loop方法为什么不会导致死锁?
一旦有新消息加入队列,系统会通过文件描述符(FileDescriptor)唤醒阻塞的线程,使其继续处理消息。如果没有这个循环,主线程执行完初始化代码后就会退出,导致应用崩溃。这种设计使得Android的消息处理系统既高效又稳定,能够在保证UI响应性的同时,避免不必要的资源消耗。此时,线程不会占用CPU资源,而是处于等待状态,直到有新消息进入队列。:死锁是指两个或多个线程互相等待对方释放资源而陷入无限等待的状态。是单线程的设计,不存在线程间资源竞争的问题,所以不会产生死锁。:当消息队列中没有消息时,原创 2025-07-02 10:09:16 · 187 阅读 · 0 评论 -
Android中卡顿分析小结
在Android开发中,卡顿(Lag)是影响用户体验的核心问题之一。其本质是UI线程(主线程)无法在规定时间内(约16ms,对应60fps的刷新率)完成帧绘制任务,导致用户操作反馈延迟、界面刷新不流畅。以下从卡顿的核心原因、分析工具和优化方案三方面详细说明:卡顿的根源是主线程被阻塞或渲染流程耗时过长,具体可分为以下几类:主线程(UI线程)负责处理用户输入(如点击、滑动)、UI刷新(测量、布局、绘制)等核心任务,若被耗时操作占用,会直接导致帧处理延迟。常见场景包括:UI渲染流程(Measure → Layou原创 2025-07-02 11:27:14 · 1279 阅读 · 0 评论