Android基础面试题

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

Android基础面试题 (⭐⭐⭐)

//搬砖人,搬砖魂,搬砖都是人上人
//github搬运,看着不方便所以搞到这上面,如果违规联系我,想起来自己还有这个的话我就会删除

1、什么是ANR 如何避免它?

答:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应
用程序无响应(ANR:Application NotResponding)对话框。
用户可以选择让程序继续运行,但是,他们在使用你的
应用程序时,并不希望每次都要处理这个对话框。因此
,在程序里对响应性能的设计很重要这样,这样系统就不会显
示ANR给用户。

不同的组件发生ANR的时间不一样,Activity是5秒,BroadCastReceiver是10秒,Service是20秒(均为前台)。

如果开发机器上出现问题,我们可以通过查看/data/anr/traces.txt即可,最新的ANR信息在最开始部分。

  • 主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
  • 主线程中存在耗时的计算
  • 主线程中错误的操作,比如Thread.wait或者Thread.sleep等 Android系统会监控程序的响应状况,一旦出现下面两种情况,则弹出ANR对话框
  • 应用在5秒内未响应用户的输入事件(如按键或者触摸)
  • BroadcastReceiver未在10秒内完成相关的处理
  • Service在特定的时间内无法处理完成 20秒

修正:

1、使用AsyncTask处理耗时IO操作。

2、使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。

3、使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。

4、Activity的onCreate和onResume回调中尽量避免耗时的代码。
BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

解决方案:

将所有耗时操作,比如访问网络,Socket通信,查询大
量SQL 语句,复杂逻辑计算等都放在子线程中去,然
后通过handler.sendMessage、runonUIThread、AsyncTask、RxJava等方式更新UI。无论如何都要确保用户界面的流畅
度。如果耗时操作需要让用户等待,那么可以在界面上显示度条。

深入回答

2、Activity和Fragment生命周期有哪些?

image

3、横竖屏切换时候Activity的生命周期

不设置Activity的android:configChanges时,切屏会重新回调各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
设置Activity的android:configChanges=”orientation”时,切屏还是会调用各个生命周期,切换横竖屏只会执行一次
设置Activity的android:configChanges=”orientation |keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

4、AsyncTask的缺陷和问题,说说他的原理。
AsyncTask是什么?

AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。

AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数,其中Params表示参数的类型,Progress表示后台任务的执行进度和类型,而Result则表示后台任务的返回结果的类型,如果AsyncTask不需要传递具体的参数,那么这三个泛型参数可以用Void来代替。

关于线程池:

AsyncTask对应的线程池ThreadPoolExecutor都是进程范围内共享的,且都是static的,所以是Asynctask控制着进程范围内所有的子类实例。由于这个限制的存在,当使用默认线程池时,如果线程数超过线程池的最大容量,线程池就会爆掉(3.0后默认串行执行,不会出现个问题)。针对这种情况,可以尝试自定义线程池,配合Asynctask使用。

关于默认线程池:

AsyncTask里面线程池是一个核心线程数为CPU + 1,最大线程数为CPU * 2 + 1,工作队列长度为128的线程池,线程等待队列的最大等待数为28,但是可以自定义线程池。线程池是由AsyncTask来处理的,线程池允许tasks并行运行,需要注意的是并发情况下数据的一致性问题,新数据可能会被老数据覆盖掉。所以希望tasks能够串行运行的话,使用SERIAL_EXECUTOR。

AsyncTask在不同的SDK版本中的区别:

调用AsyncTask的execute方法不能立即执行程序的原因及改善方案通过查阅官方文档发现,AsyncTask首次引入时,异步任务是在一个独立的线程中顺序的执行,也就是说一次只执行一个任务,不能并行的执行,从1.6开始,AsyncTask引入了线程池,支持同时执行5个异步任务,也就是说只能有5个线程运行,超过的线程只能等待,等待前的线程直到某个执行完了才被调度和运行。换句话说,如果进程中的AsyncTask实例个数超过5个,那么假如前5都运行很长时间的话,那么第6个只能等待机会了。这是AsyncTask的一个限制,而且对于2.3以前的版本无法解决。如果你的应用需要大量的后台线程去执行任务,那么只能放弃使用AsyncTask,自己创建线程池来管理Thread。不得不说,虽然AsyncTask较Thread使用起来方便,但是它最多只能同时运行5个线程,这也大大局限了它的作用,你必须要小心设计你的应用,错开使用AsyncTask时间,尽力做到分时,或者保证数量不会大于5个,否就会遇到上面提到的问题。可能是Google意识到了AsynTask的局限性了,从Android 3.0开始对AsyncTask的API做出了一些调整:每次只启动一个线程执行一个任务,完了之后再执行第二个任务,也就是相当于只有一个后台线程在执行所提交的任务。

一些问题:

1.生命周期

很多开发者会认为一个在Activity中创建的AsyncTask会随着Activity的销毁而销毁。然而事实并非如此。AsynTask会一直执行,直到doInBackground()方法执行完毕,然后,如果cancel(boolean)被调用,那么onCancelled(Result result)方法会被执行;否则,执行onPostExecute(Result result)方法。如果我们的Activity销毁之前,没有取消AsyncTask,这有可能让我们的应用崩溃(crash)。因为它想要处理的view已经不存在了。所以,我们是必须确保在销毁活动之前取消任务。总之,我们使用AsyncTask需要确保AsyncTask正确的取消。

2.内存泄漏

如果AsyncTask被声明为Activity的非静态内部类,那么AsyncTask会保留一个对Activity的引用。如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将继续在内存里保留这个引用,导致Activity无法被回收,引起内存泄漏。

3.结果丢失

屏幕旋转或Activity在后台被系统杀掉等情况会导致Activity的重新创建,之前运行的AsyncTask会持有一个之前Activity的引用,这个引用已经无效,这时调用onPostExecute()再去更新界面将不再生效。

4.并行还是串行

在Android1.6之前的版本,AsyncTask是串行的,在1.6之后的版本,采用线程池处理并行任务,但是从Android 3.0开始,为了避免AsyncTask所带来的并发错误,又采用一个线程来串行执行任务。可以使用executeOnExecutor()方法来并行地执行任务。

AsyncTask原理
  • AsyncTask中有两个线程池(SerialExecutor和THREAD_POOL_EXECUTOR)和一个Handler(InternalHandler),其中线程池SerialExecutor用于任务的排队,而线程池THREAD_POOL_EXECUTOR用于真正地执行任务,InternalHandler用于将执行环境从线程池切换到主线程。
  • sHandler是一个静态的Handler对象,为了能够将执行环境切换到主线程,这就要求sHandler这个对象必须在主线程创建。由于静态成员会在加载类的时候进行初始化,因此这就变相要求AsyncTask的类必须在主线程中加载,否则同一个进程中的AsyncTask都将无法正常工作。
5、onSaveInstanceState() 与 onRestoreIntanceState()

Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。
例如,如果activity B启用后位于activity A的前端,在某个时刻activity A因为系统回收资源的问题要被杀掉,A通过onSaveInstanceState将有机会保存其用户界面状态,使得将来用户返回到activity A时能通过onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢复界面的状态

深入理解

6、android中进程的优先级?
1. 前台进程:

即与用户正在交互的Activity或者Activity用到的Service等,如果系统内存不足时前台进程是最晚被杀死的

2. 可见进程:

可以是处于暂停状态(onPause)的Activity或者绑定在其上的Service,即被用户可见,但由于失了焦点而不能与用户交互

3. 服务进程:

其中运行着使用startService方法启动的Service,虽然不被用户可见,但是却是用户关心的,例如用户正在非音乐界面听的音乐或者正在非下载页面下载的文件等;当系统要空间运行,前两者进程才会被终止

4. 后台进程:

其中运行着执行onStop方法而停止的程序,但是却不是用户当前关心的,例如后台挂着的QQ,这时的进程系统一旦没了有内存就首先被杀死

5. 空进程:

不包含任何应用程序的进程,这样的进程系统是一般不会让他存在的

7、Bunder传递对象为什么需要序列化?Serialzable和Parcelable的区别?

因为bundle传递数据时只支持基本数据类型,所以在传递对象时需要序列化转换成可存储或可传输的本质状态(字节流)。序列化后的对象可以在网络、IPC(比如启动另一个进程的Activity、Service和Reciver)之间进行传输,也可以存储到本地。

Serializable(Java自带):

Serializable 是序列化的意思,表示将一个对象转换成存储或可传输的状态。序列化后的对象可以在网络上进传输,也可以存储到本地。

Parcelable(android专用):

除了Serializable之外,使用Parcelable也可以实现相同的效果,不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这也就实现传递对象的功能了。

区别总结如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3QkD4cz-1672055522491)(null)]

8、动画
  • View 动画:

    • 作用对象是 View,可用 xml 定义,建议 xml 实现比较易读
    • 支持四种效果:平移、缩放、旋转、透明度
  • 帧动画:

    • 通过 AnimationDrawable 实现,容易 OOM
  • 属性动画:

    • 可作用于任何对象,可用 xml 定义,Android 3 引入,建议代码实现比较灵活
    • 包括 ObjectAnimator、ValuetAnimator、AnimatorSet
    • 时间插值器:根据时间流逝的百分比计算当前属性改变的百分比,系统预置匀速、加速、减速等插值器
    • 类型估值器:根据当前属性改变的百分比计算改变后的属性值,系统预置整型、浮点、色值等类型估值器
    • 使用注意事项:避免使用帧动画,容易OOM;界面销毁时停止动画,避免内存泄漏;开启硬件加速,提高动画流畅性
    • 硬件加速原理:将 cpu 一部分工作分担给 gpu ,使用 gpu 完成绘制工作;从工作分摊和绘制机制两个方面优化了绘制速度
  • tween 补间动画。通过指定View的初末状态和变化方式,对View的内容完成一系列的图形变换来实现动画效果。 Alpha, Scale ,Translate, Rotate。

  • frame 帧动画。AnimationDrawable控制animation-list.xml布局

  • PropertyAnimation 属性动画3.0引入,属性动画核心思想是对值的变化。

Property Animation 动画有两个步聚:

1.计算属性值

2.为目标对象的属性设置属性值,即应用和刷新动画

image

计算属性分为3个过程:

过程一:

计算已完成动画分数 elapsed fraction。为了执行一个动画,你需要创建一个ValueAnimator,并且指定目标对象属性的开始、结束和持续时间。在调用 start 后的整个动画过程中,ValueAnimator 会根据已经完成的动画时间计算得到一个0 到 1 之间的分数,代表该动画的已完成动画百分比。0表示 0%,1 表示 100%。

过程二:

计算插值(动画变化率)interpolated fraction 。当 ValueAnimator计算完已完成的动画分数后,它会调用当前设置的TimeInterpolator,去计算得到一个interpolated(插值)分数,在计算过程中,已完成动画百分比会被加入到新的插值计算中。

过程三:

计算属性值当插值分数计算完成后,ValueAnimator会根据插值分数调用合适的 TypeEvaluator去计算运动中的属性值。
以上分析引入了两个概念:已完成动画分数(elapsed fraction)、插值分数( interpolated fraction )。

原理及特点:

1.属性动画:

插值器:作用是根据时间流逝的百分比来计算属性变化的百分比

估值器:在1的基础上由这个东西来计算出属性到底变化了多少数值的类

其实就是利用插值器和估值器,来计出各个时刻View的属性,然后通过改变View的属性来实现View的动画效果。

2.View动画:

只是影像变化,view的实际位置还在原来地方。

3.帧动画:

是在xml中定义好一系列图片之后,使用AnimatonDrawable来播放的动画。

它们的区别:

属性动画才是真正的实现了 view 的移动,补间动画对view 的移动更像是在不同地方绘制了一个影子,实际对象还是处于原来的地方。
当动画的 repeatCount 设置为无限循环时,如果在Activity退出时没有及时将动画停止,属性动画会导致Activity无法释放而导致内存泄漏,而补间动画却没问题。
xml 文件实现的补间动画,复用率极高。在 Activity切换,窗口弹出时等情景中有着很好的效果。
使用帧动画时需要注意,不要使用过多特别大的图,容导致内存不足。

为什么属性动画移动后仍可点击?

播放补间动画的时候,我们所看到的变化,都只是临时的。而属性动画呢,它所改变的东西,却会更新到这个View所对应的矩阵中,所以当ViewGroup分派事件的时候,会正确的将当前触摸坐标,转换成矩阵变化后的坐标,这就是为什么播放补间动画不会改变触摸区域的原因了。

9、Context相关
  • 1、Activity和Service以及Application的Context是不一样的,Activity继承自ContextThemeWraper.其他的继承自ContextWrapper。

  • 2、每一个Activity和Service以及Application的Context是一个新的ContextImpl对象。

  • 3、getApplication()用来获取Application实例的,但是这个方法只有在Activity和Service中才能调用的到。那也许在绝大多数情况下我们都是在Activity或者Servic中使用Application的,但是如果在一些其它的场景,比如BroadcastReceiver中也想获得Application的实例,这时就可以借助getApplicationContext()方法,getApplicationContext()比getApplication()方法的作用域会更广一些,任何一个Context的实例,只要调用getApplicationContext()方法都可以拿到我们的Application对象。

  • 4、创建对话框时不可以用Application的context,只能用Activity的context。

  • 5、Context的数量等于Activity的个数 + Service的个数 +1,这个1为Application。

10、Android各版本新特性
Android5.0新特性
  • MaterialDesign设计风格

  • 支持64位ART虚拟机(5.0推出的ART虚拟机,在5.0之前都是Dalvik。他们的区别是:
    Dalvik,每次运行,字节码都需要通过即时编译器转换成机器码(JIT)。
    ART,第一次安装应用的时候,字节码就会预先编译成机器码(AOT))

  • 通知详情可以用户自己设计

Android6.0新特性
  • 动态权限管理

  • 支持快速充电的切换

  • 支持文件夹拖拽应用

  • 相机新增专业模式

Android7.0新特性
  • 多窗口支持

  • V2签名

  • 增强的Java8语言模式

  • 夜间模式

Android8.0(O)新特性
  • 优化通知

    通知渠道 (Notification Channel)
    通知标志
    休眠
    通知超时
    通知设置
    通知清除

  • 画中画模式:清单中Activity设置android:supportsPictureInPicture

  • 后台限制

  • 自动填充框架

  • 系统优化

  • 等等优化很多

Android9.0(P)新特性
  • 室内WIFI定位

  • “刘海”屏幕支持

  • 安全增强

  • 等等优化很多

Android10.0(Q)目前曝光的新特性
  • 夜间模式:包括手机上的所有应用都可以为其设置暗黑模式。
  • 桌面模式:提供类似于PC的体验,但是远远不能代替PC。
  • 屏幕录制:通过长按“电源”菜单中的"屏幕快照"来开启。
11、Json

JSON的全称是JavaScript Object Notation,也就是JavaScript 对象表示法
JSON是存储和交换文本信息的语法,类似XML,但是比XML更小、更快,更易解析
JSON是轻量级的文本数据交换格式,独立于语言,具有可描述性,更易理解,对象可以包含多个名称/值对,比如:

{"name":"zhangsan" , "age":25}
史上最全的2022年最新版Android安卓面试题集锦(含答案+源码) 金三银四,又到了一年一度的黄金跳槽季,想必也许有不少Android程序员开始摩拳擦掌,蠢蠢欲动了。而网络上的面试题大部分已经过时甚至是错误成堆,漏洞百出,今天结合自己这段时间的面试经验和几个Android技术群里面大厂大牛的交流总结出了这篇2022年最新的Android面试题合集。 阅读详情

相关推荐

Android常见基础面试题

1. 请描述一下Activity 生命周期。 答: 如下图所示。共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。 onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问。 onStart(): Activity变为在屏幕上对用户可见时调用。 onResume(): Activity开始与用户

lyy919062591的博客 2932

目录大全_安卓面经_Android面经_150道安卓基础面试题全解析

网上安卓资料千千万,该专栏优势在于:由多方资料的精华浓缩为最经典面试题解析,并提供专栏内所有内容的免费解答和技术交流(私聊即可,当天必回),为读者保驾护航

a763450633的博客 1215

Android 面试题总结之Android 基础(五)

Android 面试题总结之Android 基础(ListView)(五) 前几篇面试总结中,主要讲了Android 的四大组件的相关知识点,希望在大家日常工作中有所帮助,那么在本节中主要是Android 必不可少的ListView 的相关知识点。Listview 类似的控件 ,不管是在.Net 中 ,还是在Java 中 都是使用非常广泛。正因为他的重要性,内容比较多,所以单独章节的介绍。前两篇

fuchenxuan blog 6615

史上最全的Android面试题集锦

每个 Activity 都包含一个 Window 对象,Window 对象通常是由 PhoneWindow 实现的。PhoneWindow:将 DecorView 设置为整个应用窗口的根 View,是 Window 的实现类。它是 Android 中的最基本的窗口系统,每个 Activity 均会创建一个 PhoneWindow 对象,是 Activity 和整个 View 系统交互的接口。

贵公子丶笔记 8466

常见Android面试题及答案(详细整理)

对于Android的学习,很多⼈可能学了之后,不知道⾃⼰处于哪个阶段,也不到究竟要学到哪个程度,验证⾃⼰学得如何最好的⾯试,就是尝试去⾯试,⽽⾯试⽆⾮就是问你⼀些⾯试题。所以呢,小编整理了这些 Android ⾯试题,从 Java 基础,并发,虚拟机到Android Framework,开源框架,性能优化,并且附带了详细的答案,⽆论是想⾯试还是想看看⾃⼰学得如何,那么这份⾯试题,都值得你去学习。答: 如下图所示。

Android 开发架构 1万+

1个月学会Android开发,安卓基础面试题

本文讲解了我对Android开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!在这里我也分享一份自己收录整理的**Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料**帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

m0_60635609的博客 958

Android构建自己的基础组件库,阿里、腾讯、华为、京东等多家大厂最新安卓面试题

获取屏幕的宽度(单位:px) 获取屏幕的高度(单位:px) 获取应用屏幕的宽度(单位:px) 获取应用屏幕的高度(单位:px) 获取屏幕密度 获取屏幕密度 DPI 设置屏幕为全屏 设置屏幕为非全屏 切换屏幕为全屏与否状态 判断屏幕是否为全屏 设置屏幕为横屏 设置屏幕为竖屏 判断是否横屏 判断是否竖屏 获取屏幕旋转角度 截屏 判断是否锁屏 设置进入休眠时长 获取进入休眠时长 SD卡相关 根据 Environment 判断 ...

m0_64933109的博客 470

安卓开发基础!46道面试题带你了解中高级Android面试,吐血整理

Android没凉,只是比以前难混了 7年前Android异军突起,成了新的万亿级市场,无数掘金人涌入,期待可以一展拳脚。 那时候大环境下的手游圈,只要你能有个可以运行的连连看就能找到工作,走上赛道被浪潮推着前进,这个行业不可谓不光明。 2020了,浪潮速度放缓,漫天飞舞着唱衰Android的讯息,“凉凉”是最多的字眼。 但放心,Android真的没凉! Android入门相对简单,初级Android很多很多,趋近饱和,你随意打开一个招聘app就能很直观的判断出来,现在Android准入的条件越来越高了。

chayel123的博客 4228

面试被逆袭心碎,Android-开发面经,安卓基础面试题

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2021最新面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录。

2401_84104883的博客 606

Android面试题之Java基础

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!

2401_84912240的博客 650

oppo安卓面试题,零基础学习android

前言 很多次小伙伴问到学习方法,我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情,我没啥发言权,因为我自己本身都是没啥方法可言的,就瞎折腾那种,但是大家想看这样的一篇文章,我就结合身边比较优秀的仔,那就聊一下这个事情吧。 写这个文章的的时候我构思了很多种写法,因为考虑我读者很多大学生,也有很多毕业的仔,想照顾所有的群体,那我整个文章会从读书时候的一些学习方法,还有就是工作之后的工作学习方法去写,这个思路应该也ok。 一 、Java 后端 在我写过的 《Android程序员的

weixin_46587594的博客 2830

安卓面试题解析大全(10 30)之AsyncTask全解析_android asynctask 面试

系列专栏: 安卓高频面经解析大全专栏链接:150道安卓高频面试题全解析 安卓高频面经解析大全目录详情 : 安卓面经_anroid面经_150道安卓常见基础面试题全解析 安卓系统Framework面经专栏:Android系统Framework面试题解析大全 安卓系统Framework面经目录详情:Android系统面经_Framework开发面经_150道面试题答案解析 Android进阶知识体系解析专栏链接:Android进阶知识体系解析 Android进阶知识体系解析目录详情:Android

2401_87555477的博客 427

Android面试题大全(2024年最新)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近Android面试题目所做的总结归纳,有1600+道题目 ,知识面很广 ,而且这位前辈对于每个题都自己测试给出了答案 ,如果你对某个题有疑问或者不明白,可以电脑端登录把题目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步!

Androiddddd的博客 3万+

Android面试大总结

面试题:https://zhuanlan.zhihu.com/p/93831276

heng615975867的专栏 1万+

2024Android大厂面试合集,精选(建议收藏!)

接下来就是各公司的面经了,分享出来供大家参考。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FjlW9r1i-1611123109281)(//upload-images.jianshu.io/upload_images/24142630-8eb2424736ccbca8.png?上海哔哩哔哩(B站)第一个去的是我一直心心念念的B站,可以第二轮就挂掉了…

2401_86963995的博客 3049

面试官问的Android基础题难倒了?这里有31道面试题 ,牢固你的基础

目录 1.如何对 Android 应用进行性能分析 2.什么情况下会导致内存泄露 3.如何避免 OOM 异常 4.Android 中如何捕获未捕获的异常 5.ANR 是什么?怎样避免和解决 ANR(重要) 6.Android 线程间通信有哪几种方式 7.Devik 进程,linux 进程,线程的区别 8.描述一下 an...

chuhe1989的博客 5251

Android 面试Android 篇)

oom就是我们常说的Out of Memory内存溢出,它是指需要的内存空间大于系统分配的内存空间,oom后果就是项目程序crash;原因1、加载大图片导致内存溢出2、大量内存泄露3 线程数量过多,队列容量设置过大,导致OOM解决1 使用软引用,弱引用,当堆内内存不足时,就可以自动释放缓存的Bitmap对象2 使用过的图并且不再使用,可以调用Bitmap.recycle()加速回收3 考虑使用文件缓存4 使用统一的线程池管理类进行线程管理。扩展。

X_sunmmer的博客 4852

超详细!Android 面试题大汇总与深度解析

创建一个继承自 View 或其子类的类:可以直接继承View,也可以根据需求继承TextViewImageView等更具体的子类。例如:java// 后续添加代码定义构造函数:一般需要定义至少两个构造函数,一个是在代码中创建 View 时调用的构造函数,另一个是在 XML 布局中使用时调用的构造函数。如果需要支持自定义属性,还需添加第三个构造函数。例如:java测量 View 的大小:重写方法,通过来确定 View 的宽度和高度。例如:java@Override// 假设默认宽度。

Android领域开发创作者 5423
上一篇: Android相机调用多图上传
BadSuperman
博客等级 码龄7年 1粉丝 6原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值