淘姐妹

淘姐妹

中高级android开发面试题合集详解 android开发常见面试题

手机 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

android开发,安卓高级开发工程师专业技能,android高级应用开发,android高级开发面试题以及答案

(一)Android基础知识点

1、四大组件是什么

? ? ? ? 【【淘密令】】,Service,ContentProvider,BroadcastReceiver

2、四大组件的生命周期和简单用法

? ? ? ? 【【淘密令】】的生命周期:onCreate()->onStart()->onResume()->【【微信】】>onStop()->onRestart()->onDestroy()

? ? ? ? 用法:创建一个Intent对象,将该【【淘密令】】以及将要打开的【【淘密令】】传进去,然后Intent对象将代入start【【淘密令】】()即可启动

? ? ? Service的生命周期:

? ? ? (1)onCreate()->onStart()->onDestroy()

? ? ? (2)onCreate()->onBind()->onUnBind()->onRebind()->onDestroy()

? ? ? ? 用法:

? ? ? (1)通过简单的startService()进行【【微信】】启动,此后启动该Service的组件无法把控Service的生命周期,理论上此后该Service可以在后台无期限运行,但根据实际情况该Service可能会在任意一个时刻被杀死

? ? ? ? ?我们可以在【【微信】】()里面做我们要做的操作,虽然运行ANR(Application No Response) 时间比【【淘密令】】多了近一倍,但Service跟【【淘密令】】一样不可以做耗时操作

? ? ? (2)通过绑定的方式启动Service

? ? ? ? ?绑定后,该Service与启动绑定操作的组件形成绑定,当组件销毁时,该Service也随着销毁

? ? ? ? ?ContentProvider:

? ? ? ? 提供数据的进程使用contentProvider内容提供者

? ? ? ? 获取数据的进程使用contentResolver内容解析器

? ? ? ? BroadcastReceive广播接收器生命周期:

? ? ? 生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR程序无响应的错误信息

? ? ? ? 它的生命周期为从回调onReceive()方法开始到该方法返回结果后结束

? ? ? ? 用法:

? ? ? ? (1)静态注册(常驻广播)

? ? ? 在AndroidManifest.xml中进行注册,App启动的时候自动注册到系统中,不受任何组件生命周期影响,(即便应用程序已经关闭),但是耗电,占内存?

? ? ? ? (2)动态注册(非常驻广播)

? ? ? 在代码中进行注册,通过IntentFilter意图过滤器筛选需要监听的广播,记得注销(推荐在onResume()注册,在onPause()注销),使用灵活,生命周期随组件变化

3、【【淘密令】】之间的通信方式

? ? ? ? (1)在Intent跳转时携带数据

  • 在Intent里直接赋值
  • 使用Bundle传值

? ? ? 使用Bundle传值对比在Intent里直接赋值的好处:

  • ?减少重复赋值操作(需要传递多次)
  • 除了基本类型,还可以传实现Serializable 接口的对象

? ? ? ? (2)借助类的静态变量来实现

? ? ? 由于类的静态成员可以通过“className.fileName”来访问,故而可以供两个【【淘密令】】访问从而实现【【淘密令】】之间的数据通信

? ? ? ? (3)借助全局变量 Application 来实现

? ? ? 和类的静态变量类似,但是这个类作为单独第三个类(最好是写一个Application类)

? ? ? ? (4)借助Service服务

? ? ? ? ?Service设计的本意,就是提供一些后台的服务,数据存取,也可以归于其职责的一部分

? ? ? ? ?Service是提供了直连机制,调用的【【淘密令】】,可以通过bindService方法,与目标Service建立一条数据通路,拿到IBinder。这样,通过Android提供的IPC模型(进程间通信),就可以进行远程方法的调用和数据的传输了

? ? ? ? ?通过这种模式,可以解决一定问题,但是对于Service来说,实在是太大才小用了,Service的专长,不是在数据,还是在逻辑。对于传数据而言,Service还是重量了一点,不但是有连接耗精力,传输经由IPC,写起来也够费劲。而且作为组件,Service随时可能死掉,你还是要费劲心机的处理数据的持久化,得不偿失

? ? ? ? (5)借助外部存储来实现通讯

? ? ? ? Ⅰ.借助 SharedPreference来实现

? ? ? SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了string,set,int,long,float,boolean六种数据类型。最终数据是以xml形式进行存储。在应用中通常做一些简单数据的持久化缓存

? ? ? ? Ⅱ.借助 SQLite 来实现

? ? ? ? SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,在存储大量复杂的关系型数据的时可以使用,比前面学过的只适用于存储简单数据的两种存储方式要好很多

? ? ? ? Ⅲ.借助 Flie 来实现

? ? ? 文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供openFileInput()和openFileOutput()方法来读取设备上的文件

4、【【淘密令】】各种情况下的生命周期

? ? ? ? (1)两个【【淘密令】】(A->B)切换(B正常的【【淘密令】】)的生命周期:【【微信】】>onCreate(B)->onStart(B)->onResume(B)? ? ? ? ? ? ? ?->oStop(A)

? ? ? 这时如果按回退键回退到A:【【微信】】>onRestart(A)->onStart(A)->onResume(A)->oStop(B)

? ? ? 如果在切换到B后调用了A.finish(),则会走到onDestory(A),这时点回退键会退出应用

? ? ? ?(2)两个【【淘密令】】(A->B)切换(B透明主题的【【淘密令】】或是Dialog风格的Acivity)的生命周期:【【微信】】>onCreate(B)? ? ? ? ? ? ? ?->onStart(B)->onResume(B)

? ? ? 这时如果回退到A:?【【微信】】>onResume(A)->oStop(B)->onDestory(B)

? ? ? ? (3)【【淘密令】】(A)启动后点击Home键再回到应用的生命周期:【【微信】】>oStop(A)->onRestart(A)->onStart(A) ? ? ? ? ? ? ? ? ? ?->onResume(A)

? ? ? ? (4)横竖屏切换的时候,【【淘密令】】 各种情况下的生命周期

  • 切换横屏时:onPause->onSa【【微信】】>onStop->onDestory->onCreate->onStart->onRestoreInstanceState? ? ? ? ? ? ? ->onResume
  • 切换竖屏时:onPause->onSa【【微信】】>onStop->onDestory->onCreate->onStart->onRestoreInstanceState? ? ? ? ? ? ? ->onResume
  • 如果在AndroidMainfest.xml中修改该【【淘密令】】的属性,添加android:configChanges="orientation":? ? ? ? ? ? ? ? ? ? ? ? ? ? ?onPause->onSa【【微信】】>onStop->onDestory->onCreate->onStart->onRestoreInstanceState?->onResume
  • 如果AndroidMainfest.xml中该【【淘密令】】中的android:configChanges="orientation|keyboardHidden",则只会打印onConfigurationChanged

? ? ? ? (5)【【淘密令】】上有Dialog的时候按Home键时的生命周期

? ? ? AlertDialog并不会影响【【淘密令】】的生命周期,按Home键后才会使【【淘密令】】走onPause->onStop,AlertDialog只是一个组件,并不会使【【淘密令】】进入后台

? ? ? AlertDialog和Toast是通过来显示的,AlertDialog和Toast可以看做是当前【【淘密令】】的一部分View

5、【【淘密令】】与Fragment之间生命周期比较

? ? ? 【【淘密令】】:

? ? ? (1)onCreate():【【淘密令】】创建界面时,调用此方法

? ? ? ? (2)onStart():【【淘密令】】界面可见时,调用此方法

? ? ? ? (3)onResume():界面获得焦点可以和用户可交互时,调用此方法

? ? ? ? (4)onPause(): 界面可见(变为半透明或弹出对话框)但失去焦点不可以和用户交互,调用此方法

? ? ? ? (5)onStop(): 界面完全不可见时 ,调用此方法

? ? ? ? (6)onDestroy(): 【【淘密令】】被销毁时,调用此方法

? ? ? ? (7)onRestart():界面由不可见变为可见时,调用此方法和onStart()方法

? ? ? ? Fragment:

? ? ? ? (1)onAttach():Fragment和【【淘密令】】关联时,调用此方法

? ? ? ? (2)onCreate():创建Fragment时,调用此方法

? ? ? ? (3)【【微信】】w():加载Fragment的ui布局时,调用此方法

? ? ? ? (4)onActi【【微信】】():【【淘密令】】的onCreate方法完成时,调用此方法

? ? ? ? (5)onStart(): Fragment和【【淘密令】】一起启动且可见时,调用此方法

? ? ? ? (6)onResume():Fragment获取焦点时,调用此方法

? ? ? ? (7)onPause():Fragment失去焦点但可见,调用此方法

? ? ? ? (8)onStop():Fragment完全不可见时,调用此方法

? ? ? ? (9)onDestroyView():Fragment布局被移除时,调用此方法

? ? ? ? (10)onDestroy():Fragment被销毁时,调用此方法

? ? ? ? (11)onDetach():Fragment和【【淘密令】】解除关联,调用此方法

6、【【淘密令】】的四种启动模式对比

? ? ? standard(标准模式-默认)

? ? ? ? 特点:(1)【【淘密令】】的默认启动模式

? ? ? ? (2)每启动一个【【淘密令】】就会在栈顶创建一个新的实例

? ? ? ? 缺点:当【【淘密令】】已经位于栈顶时,再次启动【【淘密令】】还需要再创建一个新的实例,不能直接复用

? ? ? 【【微信】】(栈顶复用模式)

? ? ? 特点:该模式会判断要启动的【【淘密令】】实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例

? ? ? 缺点:如果【【淘密令】】并未处于栈顶位置,则可能还会创建多个实例

? ? ? singleTask(栈内复用模式)

? ? ? 特点:使【【淘密令】】在整个应用程序中只有一个实例。每次启动【【淘密令】】时系统首先检查栈中是否存在当前【【淘密令】】实例,如果存在 ? ?则直接复用,并把当前【【淘密令】】之上所有实例全部出栈

? ? ? singleInstance(全局唯一模式)

? ? ? singleInstance模式也是单例的,但和singleTask不同,singleTask只是任务栈内单例,系统里是可以有多个singleTask 【【淘密令】】实例的,而singleInstance 【【淘密令】】在整个系统里只有一个实例,启动一singleInstance 【【淘密令】】时,系统会创建一个新的任务栈,并且这个任务栈只有他一个【【淘密令】】

? ? ? singleInstance模式并不常用,如果我们把一个【【淘密令】】设置为singleInstance模式,你会发现它启动时会慢一些,切换效果不好,影响用户体验。它往往用于多个应用之间,例如一个电视launcher里的【【淘密令】】,通过遥控器某个键在任何情况可以启动,这个【【淘密令】】就可以设置为singleInstance模式,当在某应用中按键启动这个【【淘密令】】,处理完后按返回键,就会回到之前启动它的应用,不影响用户体验

7、Fragment状态保存【【微信】】lt是哪个类的方法,在什么情况下使用

? ? ? Fragment和【【淘密令】】里都有各自的【【微信】】lt方法

? ? ? Fragment和【【微信】】ivity都能接收到自己的发起的请求所返回的结果

? ? ? 【【微信】】ivity发起的请求,Fragment完全接收不到结果

? ? ? Fragment发起的请求,虽然在【【微信】】ivity中能获取到结果,但是re【【微信】】完全对应不上

? ? ? ? 如果希望在Fragment的onActi【【微信】】接收数据,就要调用【【微信】】art【【淘密令】】ForResult,而不是Fragment.get【【淘密令】】().【【微信】】lt,且re【【微信】】一定不要大于0xffff(65535)

8、如何实现Fragment的滑动

? ? ? ? (1)首先把Fragment,【【微信】】都实例化

? ? ? ? (2)把Fragment添加到泛型【【微信】】里

? ? ? ? (3)把带有Fragment的【【微信】】和Adapter绑定

? ? ? ? (4)【【微信】】和Adapter进行绑定

9、Fragment之间传递数据的方式

? ? ? ? (1)创建Fragment的需要添加tag(标签),然后在发送数据的FragmentA中根据tag找到接收数据的FragmentB,调用FragmentB中接收数据的方法

? ? ? ? (2)利用接口回调,在FragmentB中创建一个接口,并且在触发FragmentA中事件的的时候如果有实现该接口的类,将产生回调

? ? ? ? (3)利用第三方开源库E【【微信】】,E【【微信】】是一种用于线程间通信的封装类,用来代替Handler、BroadCastReceiver、Intent等在【【淘密令】】、Service、Fragment之间传递数据,内部基本是基于观察者模式对被观察者进行实时监听和传递数据

10、Service和【【淘密令】】怎么进行数据交互

? ? ? ? (1)通过BroadcastReceiver

? ? ? ? 缺点:

  • 系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟
  • 广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

? ? ? ? (2)共享文件交互

? ? ? ? 优缺点分析:这种方式实现【【淘密令】】与Service的交互,可以说很方便,就像使用管道,一个往里写,一个往外读。但这种方式也有缺陷,写入数据较为复杂以及数据量较大时,就有可能导致写入与读数据出不一致的错误。同时因为经过了一个中转站,这种操作将更耗时

? ? ? ? (3)接口回调(Binder和Ser【【微信】】)

? ? ? Server端用一个类继承自Binder并实现该接口。这里Binder就是「接口」(IBinder的实现)。【【淘密令】】中通过Binder获取Service的实例,在Ser【【微信】】中set一个listener到Service里,Service再回调数据给【【淘密令】】

? ? ? ? 缺陷:不能进行跨进程通信

? ? ? ? (4)Messenger

? ? ? Android里大部分的跨进程的IPC都是基于Binder实现。这种方式是客户端和Service分别创建一个Messenger,用Handler发送msg

? ? ? 优缺点分析:通过Messenger来实现【【淘密令】】和Service的交互,其实Messenger也是通过AIDL来实现的。对于前两种实现方式,Messenger方式总体上来讲也是比较容易理解的,这就和平时使用Handler和Thread通信一个道理

? ? ? ? (5)AIDL

? ? ? ? 原理: AIDL属于Android的IPC机制,常用于跨进程通信,主要实现原理基于底层Binder机制。

? ? ? ? 优缺点分析:AIDL在Android中是进程间通信常用的方式,可能使用较为复杂,但效率高,扩展性好。同时很多系统服务就是以这种方式完成与应用程序通信的

11、谈谈你对ContentProvider的理解

? ? ? ContentProvider是Android的四大组件之一,底层采用的是Binder机制,


2022年换手机推荐这8款 2022年换手机建议这八款

2021年换手机推荐,2020年换手机推荐,年底换手机推荐,今年想换手机换什么样的最好

相信很多人在买手机的时候,是很看重内存容量的,大内存手机可以存储更多照片、视频、软件等,使用起来也更加安心,不用因为内存不足而频繁清理手机垃圾文件。如果你近期也有换手机的计划,那么不妨来看看以下这4款“12+256GB”大内存手机,全是“高性价比”,流畅三五年不是问题。

参考价格:12+256GB--1649元

一加 ACE 竞速版 是一款备受关注的手机,以其高性能和优秀的用户体验而闻名,这款手机搭载了强劲的“天玑8100-Max芯片+内存UFS3.1+LPDDR5”的铁三角组合,保障了流畅的性能输出和低功耗表现,综合跑分高达84万分以上,让用户能够轻松享受到高性能的畅快体验。

手机正面采用的是一块6.7英寸LCD直屏,外观设计简洁大方,屏幕边缘过度平滑,分辨率为2412*1080,支持120Hz刷新率和最高240Hz触控采样率,能够带来流畅的滑动和响应,还有6档自适应调节,根据不同场景匹配帧率,兼顾画面的流畅与省电。

一加 ACE 竞速版 的续航方面,机身内置了5000mAh的大容量电池,能够满足一天的使用,并且支持67W的快充,能让充电变得更加迅速便捷。该机还有后置6400万像素高清三摄、智能全场景NFC、密闭式立体双扬声器、旗舰级X轴线性马达等,配置相当全面,使用体验很出色。

参考价格:12+256GB--1699元

红米 Note 12T Pro 搭载“天玑8200-Ultra”处理器,与天玑移动平台深度联合调校,CPU主频高达3.1GHz,同时配备“LPDDR5+UFS3.1”旗舰内存规格,跑分轻松突破91万分以上,性能非常强劲,无论是日常使用还是玩大型游戏,都能稳定流畅。

手机正面配置一块6.6英寸LCD护眼屏,重金定制高配调校,支持144Hz超高刷新率、DCI-P3电影级广色域、HDR10高动态范围显示、10.7亿丰富色彩,画面不仅细腻流畅,还能兼顾省电与护眼,显示效果非常出色。

红米 Note 12T Pro 机身内置5080mAh大容量电池,并且支持67W快充,续航长达1.35天,可以满足用户长时间使用的需求,没电了快充也能帮助快速回血。影像方面,该机相机后置6400万像素高清三摄,支持微距、超广角镜头拍摄,在强大的ISP算力下,相机抓拍速度也很快,在同价位里表现相当不错。

参考价格:12+256GB--2099元

i【【微信】】 是一款期待值很高的手机,主打性价比机型,如今口碑和销量的表现都不错,手机搭载“天玑8200”处理器,预装了基于Android 13.0开发的OriginOS 3操作系统,同时配备“增强版LDPPR5+超频版UFS3.1”内存规格,拥有全覆盖立体散热系统,性能得到更好的发挥,流畅使用三四年轻轻松松。

手机正面配置一块6.78英寸OLED柔性直屏,20:9比例呈现更广阔的视野,支持120Hz高刷新率、1300nit局部峰值亮度、SGS低蓝光认证,有着高质量的输出画面,和流畅的响应速度。

i【【微信】】 机身内置5000mAh大容量电池+120W超级闪充,续航强劲充电快,10分钟即可从0%充至60%,急着出门随便充一下,也能快速满血复活。该机还有后置6400万OIS超清主摄、X轴线性马达、封闭式立体扬声器、全场景NFC、红外遥控器等,综合体验非常优秀。

参考价格:12+256GB--1799元

OPPO K10 搭载联发科“天玑8000-Max处理器+LPDDR5+UFS3.1”内存规格,在性能和功耗控制方面很优秀,配备金刚石VC液冷散热,高达16625mm2散热面积,达到100%覆盖核心发热源,长时间使用也不易发热,让芯片得到了更好的发挥,跑分高达77万分以上。

手机正面配置一块6.59英寸LCD护眼屏,6档刷新率自适应调节,画面流畅又省电,屏幕支持120Hz高刷新率、100%DCI-P3广色域、240Hz的触控采样率,带来了更加细腻的视觉体验,对于日常使用以及游戏等场景到能带来更大的提升。

OPPO K10 机身内置5000mAh大电池,得益于天玑8000-MAX极低的功耗表现,续航时长超过1.3天,并且支持67W闪充,可以在29分钟将5000mAh电池充至80%电量,还有五大核心关口防护,做到全方位守护你的充电安全。

当下买手机建议选择“12+256GB”大内存版本,内存大能存储更多文件,运行起来也更加流畅,以上4款“高性价比手机”就很符合要求,价格都在2000元以内,是性能强劲配置高的机型,你更喜欢哪一款呢?欢迎留言讨论。

举报/反馈