Android面试题:Android基础篇

2021-12-07 1364

前言

“有人觉得自己不找工作,不需要看面试题,真的是这样吗?试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是很可怕的,至少我这么认为。看面试题的目的不一定要跳槽,而是知道自己的优缺点是什么,知道市场需要什么样的人,只有这样才能和社会接上轨迹!”

1、Android点击应用图标如何启动APP?

  • 1.点击应用图标后会去启动应用的LauncherActivity。

  • 2.如果LauncherActivity所在进程没有创建,就会创建新进程(以Socket形式通知Zygote进程去fork新进程)。

  • 3.整体的流程就是Activity的启动流程。

2、Activity四种启动模式

  • 1.standard 默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

  • 2.singleTop 可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

  • 3.singleTask 只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

  • 4.singleInstance 只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

3、Android横竖屏切换activity生命周期?

横竖屏切换根据Android系统版本会有差异,具体细节请参考:Activity横竖屏切换生命周期详解

  • 1.AndroidManifest.xml不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
    切横屏时会执行一次,切竖屏时会执行两次。生命周期如下:
    onSaveInstanceState-onPause-onStop-onDestory-onCreate-onStart-onRestoreInstanceState-onResume

  • 2.设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。生命周期如下:onSaveInstanceState-onPause-onStop-onDestory-onCreate-onStart-onRestoreInstanceState-onResume

  • 3.设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。

4、PathClassLoader和DexClassLoader的区别?

  • 1.PathClassLoader: 只能加载安装到Android系统的APK,即/data/data目录,是Android默认的类加载器。

  • 2.DexClassLoader: 可以加载任意目录下的dex、jar、apk、zip文件。

5、Android中Intent传递数据的大小限制?如何解决该问题?

  • 1.大小限制大约是1MB:超过该限制可能导致 OOM。

  • 2.解决办法

    • 进程内:EventBus、文件缓存

    • 进程间:通过ContentProvider进行进程间数据共享和传递。

总结:不要通过 Intent 在 Android 基础组件之间传递大数据(binder transaction 缓存为1MB)

6、Android有哪些Context的相关类?

  • 1.Context抽象类

  • 2.ContextImpl:Context的实现类

  • 3.ContextWrapper:Context的包装类(内部是ContextImpl),Applicaiton、Activity、Service都间接或者直接继承自ContextWrapper

7、IntentService和Service有什么区别?

  • 1.Service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程(比喻成没有界面的activity),也就是说,在更多时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。

  • 2.IntentService是Service的子类,IntentService在执行onCreate操作的时候,内部开了一个线程,去你执行你的耗时操作。通过Handler looper message的方式实现了一个多线程的操作,同时耗时操作也可以被这个线程管理和执行,同时不会产生ANR的情况。

8、Service启动方式和对应的生命周期以及区别?

  • 1.startService(onCreate-onStartCommand-onDestory)
    服务与启动者没有必然联系,启动者销毁,服务也可以存在;除非主动调用StopService方法来停止服务。

  • 2.bindService(onCreate-onBind-onUnbind-onDestory)
    服务与启动者相互关联,启动者销毁,那么服务也会跟着销毁;比如activityA中bind服务,然后activityB中也在使用该服务,一旦activityA销毁那么服务也会销毁,这个时候activityB中服务也就没用了,除非再bind一次。

  • 3.startService之后再bindService这样避免宿主死亡之后service跟着被销毁。

9、BroadcastReceiver有哪几种类型?

  • 无序广播:无序广播类似于电视台播放新闻联播,不管你当时有没有准时收看,都会按时播放新闻联播。

    发送方式:通过sendBroadcast(intent)发送
    特点:①无法终止广播 ②无法修改数据

  • 有序广播:有序广播就类似于中央发送的红头文件,比如说会首先发送到哪个省,然后发送到哪个市等等,按照优先级一级一级的进行接收,就比如中央给每个村民发送1千斤大米。

    发送方式:通过sendOrderedBroadcast()发送
    特点:①可以终止广播 ②可以修改数据

  • 粘性广播:特定是Intent会一直保留到广播事件结束,没有10s限制。一般用来确保重要的状态改变后的信息被持久保存,并且能随广播给新的BroadcastReceiver,比如电源的改变。
    发送方式:通过SendStickyBroadcast()发送。

10、Android有哪些进程?

  • 1.前台进程: 用户当前操作所必须的进程

  • 2.可见进程:没有任何前台组件,但是任辉影响屏幕上可见内容的进程。

  • 3.服务进程:正在运行服务(该服务通过startService()启动),且不属于上面两者的进程。

  • 4.后台进程:包含目前对用户不可兼得Activity的进程。

  • 5.空进程:不包含任何活动组件的进程。

11、Android进程和线程的区别

  • 1.进程是资源管理的最小单位,线程是程序执行的最小单位。

  • 2.每个进程都有自己的数据段、代码段和堆栈段。线程通常叫做轻型的进程。它包含独立的栈和cpu寄存状态,每个线程共享其所附属进程的所有资源,包含打开的文件,内存页面,信号标识以及分配内存等。

  • 3.线程比进程花费更小的CPU资源。

  • 4.在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持多处理器,并且减少进程上下文切换的开销。

  • 5.线程和进程的关系是:①线程属于进程②线程运行在进程空间内③同一进程所产生的线程共享同一内存空间,当进程退出所产生的的线程会被强制退出并清除④一个进程至少需要一个线程来作为它的指令执行体⑤进程管理着资源(比如CPU,内存,文件等),将线程分配到某个CPU运行。

  • 6.线程按照其调度这可分为用户级线程和内核级线程两种。

  • 7.用户级线程要绑定内核级线程使用。

  • 8.默认情况下不能保证新线程和调用线程的执行顺序。

  • 9.每个进程内部的不同线程都有自己的唯一标识(ID),线程标识只在它所属的进程环境中有效。

  • 10.Sleep线程告诉系统,自己在一段时间内不被调度。

12、Android线程间通信有哪些方式?

  • 1.接口

  • 2.Handler机制

  • 3.观察者模式(EventBus)

  • 4.Android使用RunonUiThread可以切换到主线程

  • 5.AsyncTask机制

  • 6.BroadCast

13、Android进程间通信有哪些方式?

  • 1.Bundle,可以在一个进程中通过Intent将携带数据的Bundle发送到另一个进程的组件。

  • 2.ContentProvider,多个App共享数据

  • 3.AIDL(Android Interface Define Language)服务,客户端定义接口暴露给服务端使用

  • 4.BroadCast

  • 5.Socket

14、如何进行进程保活

  • 1.提升进程优先级,降低进程被杀死的概率。

  • 2.拉活已经被杀死的进程。

    ● 利用广播拉活Activity

    ● 手机去监听系统广播:如开机广播,锁屏解锁广播等。

15、什么 是***和反序列化?

  • 1.序列化:将数据结构或对象转换成二进制的过程

  • 2.反序列化:将在序列化过程中生成的二进制串转换成数据结构或对象的过程

16、Serializable和Parcelable的区别

  • 1.Serilizable是java实现的一套序列化方法,会触发频繁的IO操作,效率较低,适合将对象存储到磁盘上的情况。

  • 2.Parcelable是Android提供的序列化方法。Parcelable将序列化后的字节流写入到一个共享内存中,其他对象可以从该共享内存中读出字节流,并反序列化成对象,效率较高,适合对象间和进程间传递信息。

17、64k问题的产生原因和如何解决?

  • 1.产生原因:Dex文件中class、method的索引使用short类型,因此如果方法、类的总数超过了2字节的short-65535就会出问题。

  • 2.解决办法:使用Google的Multidex

18、Android 中的动画有哪些?

  • 1.帧动画 指通过指定的每一帧的图片和播放时间,有序的进行播放的动画效果。

  • 2.补间动画 指通过指定View的初始状态、变化时间、移动距离等方式实现的动画效果。
    属性有scale、alpha、Translate、Rotate
    注意:只是在视图层实现了动画效果,并没有真正改变View的属性。

  • 3.属性动画 属性动画,通过不断地改变View的属性,不断重绘而形成动画效果。
    相比较视图动画,View的属性是真正改变。

以上就是Android面试题:Android基础篇的详细内容,更多请关注php知识-学习天地 www.lxywzjs.com其它相关文章!

分享至:

分享到QQ空间 分享到朋友社区 新浪微博分享

栏目地图