前言
“
有人觉得自己不找工作,不需要看面试题,真的是这样吗?试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是很可怕的,至少我这么认为。看面试题的目的不一定要跳槽,而是知道自己的优缺点是什么,知道市场需要什么样的人,只有这样才能和社会接上轨迹!
”
1、Android点击应用图标如何启动APP?
1.点击应用图标后会去启动应用的<code>LauncherActivity。</code> <code>2.</code>如果<code>LauncherActivity</code>所在进程没有创建,就会创建新进程(以Socket形式通知<code>Zygote进程</code>去fork新进程)。 3.整体的流程就是<code>Activity</code>的启动流程。
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的区别?
<code>1.PathClassLoader</code>: 只能加载安装到Android系统的APK,即<code>/data/data</code>目录,是Android默认的类加载器。 <code>2.DexClassLoader</code>: 可以加载任意目录下的<code>dex、jar、apk、zip</code>文件。
进程内:EventBus、文件缓存 进程间:通过ContentProvider进行进程间数据共享和传递。 总结:不要通过 Intent 在 Android 基础组件之间传递大数据(binder transaction 缓存为1MB)
6、Android有哪些Context的相关类?
<code>1.Context抽象类</code> <code>2.ContextImpl</code>:Context的实现类 <code>3.ContextWrapper</code>:Context的包装类(内部是<code>ContextImpl</code>),<code>Applicaiton、Activity、Service</code>都间接或者直接继承自<code>ContextWrapper</code>
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()发送 特点:①可以终止广播 ②可以修改数据 发送方式:通过<code>SendStickyBroadcast()</code>发送。
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.拉活已经被杀死的进程。
<code> ● 利用广播拉活Activity</code> ● 手机去监听<code>系统广播</code>:如开机广播,锁屏解锁广播等。
15、什么 是序列号和反序列化?
1.序列化:将数据结构或对象转换成二进制的过程 2.反序列化:将在序列化过程中生成的二进制串转换成数据结构或对象的过程
16、Serializable和Parcelable的区别
1.Serilizable是java实现的一套序列化方法,会触发频繁的IO操作,效率较低,适合将对象存储到磁盘上的情况。 2.Parcelable是Android提供的序列化方法。Parcelable将序列化后的字节流写入到一个共享内存中,其他对象可以从该共享内存中读出字节流,并反序列化成对象,效率较高,适合对象间和进程间传递信息。
17、64k问题的产生原因和如何解决?
1.产生原因:<code>Dex文件</code>中class、method的索引使用<code>short类型</code>,因此如果方法、类的总数超过了<code>2字节的short-65535</code>就会出问题。 2.解决办法:使用<code>Google的Multidex</code>
18、Android 中的动画有哪些?
1.帧动画 指通过指定的每一帧的图片和播放时间,有序的进行播放的动画效果。 2.补间动画 指通过指定View的初始状态、变化时间、移动距离等方式实现的动画效果。 属性有scale、alpha、Translate、Rotate 注意:只是在视图层实现了动画效果,并没有真正改变View的属性。 3.属性动画 属性动画,通过不断地改变View的属性,不断重绘而形成动画效果。 相比较视图动画,View的属性是真正改变。
附:Android基础思维导图
