目前的就业形势越来越严峻,很多大中小厂因为业务停滞不前都选择“精简人员”,节约成本。对于Android开发来说,面试的深度和难度也是一直在不断提升。想要抓住金三银四的好机会,大家应该紧锣密鼓的开始准备起来了。
针对Android面试,我收集了一些 Android开发面试题合集详解 。都是从Android开发从业人员的真实记录。满满的干货!
面试官问题一:请描述一下Activity 生命周期 ?
回答: 共有七个周期函数,按顺序分别是:
onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问。
onStart():Activity变为在屏幕上对用户可见时调用。
onRestart(): Activity被重新启动时调用。该活动仍然在栈中,而不是启动新的Activity。
onResume():Activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用。
onPause(): Activity被暂停或收回cpu和其他资源时调用,该方法用户保护活动状态的,也是保护现场。
onStop(): Activity被停止并转为不可见阶段及后续的生命周期事件时调用
onDestroy() : 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
①完整生命周期: 即从一个Activity从出现到消失,对应的周期方法是从onCreate()到onDestroy()。
②可见生命周期: 当Activity处于可以用户看见的状态,但不一定能与用户交互时,将多次执行从onStart()到onStop()。
③前景生命周期: 当Activity处于Activity栈最顶端,能够与其他用户进行交互时,将多次执行从onResume()到onPause()。
面试官问题二:两个Activity之间跳转时必然会执行的是哪几个方法?
回答:一般情况下比如说有两个activity,分别叫A,B。
①当在A 里面激活B 组件的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。这个时候B覆盖了A的窗体, A会调用onStop()方法。
②如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。如果B已经存在于Activity栈中,B就不会调用onCreate()方法。
面试官问题三:怎样将一个Activity设置成窗口的样式?
回答:在AndroidManifest.xml文件中设置当前需要改变成窗口样式的Activity的属性即android:theme="@android:style/Theme.dialog"或者
android:theme="@android:style/Theme.Holo.Dialog"2.在styles.xml文件中自定义一个主题样式,改主题样式必须继承Dialog的样式。然后在
AndroidManifest.xml文件中引用你自定义的主题即可。
@drawable/my_dialog
在drawable中新建my_dialog.xml文件,内容如下:
android:width=“3dp”
android:color=“@android:color/holo_blue_light” />
android:left=“10dp”
android:top=“10dp”
android:right=“10dp”
android:bottom=“10dp” />
在AndroidManifest.xml文件中设置当前需要改变成窗口样式的Activity的属性,即
android:theme=“@style/Theme.MyDialog”
面试官问题四: 切换横竖屏时候Activity的生命周期?
回答:①新建一个Activity,并把各个生命周期打印出来 。
②运行Activity,得到如下信息 onCreate–> onStart–> onResume–> 3、按crtl+f12切换成横屏时 onSaveInstanceState–> onPause–> onStop–> onDestroy–> onCreate–> onStart–> onRestoreInstanceState–> onResume–> 4、再按crtl+f12切换成竖屏时,发现打印了两次相同的log onSaveInstanceState–> onPause–> onStop–> onDestroy–> onCrea
面试官问题五:什么时候使用Service?
回答:Service就是一种运行在后台的组件,甚至从始至终用户都不需要和它进行交互,比如Service可以处理一些网络事物,播放音乐,I/O文件传输,或者和Content provider交互。如果需要注意的是,一个Service运行在它宿主线程的主线程上,Service不会自己创建一个新的线程,也不会在一个独立的线程上运行(除非你指定它),也就是说如果你要用Service来执行大量的占用CPU的 *** 作,或者是运行耗时的阻塞 *** 作,例如后台播放MP3,或者网络事物,那么你就应该创建一个新的线程来实现Service去完成这些任务,通过创建新的线程,你降低ANR(Application Not Respond)的风险,不影响主线程保持与用户的交互。
线程和Service就有一定的相似性,到底什么时候用Service,什么时候用Thread呢?在Google官方文档里这样写:如果你需要在主线程之外来完成你的任务,但只发生在在用户与当前Application进行交互的时候,就创建线程来实现它,而不是Service。比如说,如果你想播放音乐,但是只想在当前Activity运行的时候,如果当前Activity死掉了,那么也就停止播放,你可以在onCreate()中创建新的线程,在onStart()中开始运行线程,然后在onStop()中停止这个线程。你也可以考虑用异步加载AsyncTask或者HandlerThread的方式来代替传统的线程。谨记一个Service是在当application的主线程上跑,如果要进行大量的 *** 作,那么就创建一个新的线程来实现Service。
面试官问题六:怎么在activity中启动自己对应的service? Activity怎么和service绑定?
回答:①Activity通过bindService(Intent service, ServiceConnection conn, int flags)跟Service进行绑定。
②绑定成功以后,Service会将代理对象通过回调的形式传递给MyServiceConnection,这样我们就获取Service提供的代理对象
面试官问题七: 两个Activity之间怎么传递数据?
回答:①用Intent.putTExra(“name”,”data”)传递数据
②用Bundle传递数据包
③传递值对象
面试官问题八:怎样在启动一个Activity是就启动一个service?
回答: 定义好一个service,然后在Activity的onCreate里面进行连接并bindservice或者直接startService。
面试官问题九: 请描述一下Intent 和 Intent Filter?
回答:Intent 在 Android 中被翻译为"意图",熟语来讲就是目的,他们是三种应用程序基本组件 —activity,service 和 broadcast receiver 之间互相激活的手段。
在调用 Intent 名称时使用 ComponentName 也就是类的全名时为显示调用。这种方式一般用于应用程序的内部调用, 因为你不一定会知道别人写的类的全名。
我们来看看隐式 Intent 怎么用?
首先我们先配置 我们的 Activity 的 Intent Filter
这样在调用的时候指定 Intent 的 action,系统就是自动的去对比是哪个 intent-filter 符合我 们的 Activity,找到后就会启动 Activity 。
一个 intent filter 是 IntentFilter 类的实例, 但是它一般不出现在代码中,而是出现在 android Manifest文件中, 以的形式。
(有一个例外是broadcast receiver的intent filter 是使用 Context.registerReceiver()来动态设定的, 其 intent filter 也是在代码中创建的.)
一个filter有action, data, category等字段. 一个隐式intent为了能被某个intent filter接受, 必须通过 3 个测试. 一个 intent 为了被某个组件接受, 则必须通过它所有的 intent filter 中 的一个。
面试官问题十: Service有哪些启动方法 ? 什么是Servic;有什么区别,怎样停用Service?
回答:①两种启动 Service 的方式 Context.startService() 和 Context.bindService()。
②区别为Context.startService():Service 会经历 onCreate -> onStart(如果 Service 还没有运行, 则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(), 所以一个 Service 的 onStart 方法可能会重复调用多次 ); stopService 的时候直接 onDestroy,如果是调用者自己直接退出而没有调用 stopService 的话,Service 会一直在后 台运行。Service 的调用者再启动起来后可以通过 stopService 关闭 Service 。
Context.bindService():Service 会经历 onCreate() -> onBind(),onBind 将返回给客户端 一个 IBind 接口实例,IBind 允许客户端回调服务的方法,比如得到 Service 运行的状态或其 他 *** 作。这个时候把调用者(Context,例如 Activity)会和 Service 绑定在一起,Context 退出了,Srevice 就会调用 onUnbind -> onDestroyed 相应退出,所谓绑定在一起就共存亡了 。
③停用 service 使用 context.stopService()
这以上就是面试者常遇到的面试问题;不管是刚入行的或者跳槽的;还是在准备转行Android开发的;这些技术性问答题是必备的基础,各种话术是拿住面试官的问题关键!能灵活运用但不会表达的或者想进入大厂技术还有所欠缺的,背下来也是非常必要。有关更多面经笔记下方领取:https://shimo.im/docs/5rk9dyvKa4Fz1Kqx/ 《免费Android技术丶面试题纲丶核心笔记资料》
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)