说Activity、Intent、Service 是什么关系…
这道题想考察什么?
- 是否了解Activity的原理
- 是否了解Intent的原理
- 是否了解Service的原理
考察的知识点
- Activity的原理
- Intent的原理
- Service的原理
考生应该如何回答
1、Activity相关说明
Android中,Activity是所有App的根本内容,所有App的流程都运行在Activity之中,Activity有着自己的生命周期。 由系统控制生命周期,程序是无法改变,但可以运用onSaveInstanceState保存其状态对于Activity,最重要的是其生命周期的把握(如下图),然后就是状态的保存和恢复(onSaveInstanceState onRestoreInstanceState),和Activity之间的跳转和数据传输(intent)。
2、Intent的相关说明
Android中提供了Intent机制来辅助应用间的交互与通讯,Intent管理者对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责寻找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可以运用于应用程序之间,也可运用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,完成了调用者与被调用者之间的解耦。
在SDK中给出了 Intent作用的表现形式为:
- 通过Context.startActivity() orActivity.startActivityForResult() 启动一个Activity;
- 通过 Context.startService() 启动一个服务,或者通过Context.bindService() 和后台服务交互;
- 通过广播方法(比如 Context.sendBroadcast(),Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()) 发给broadcast receivers。
3、Service的相关说明
Service是android的一种机制,当它运行的时候如果是LocalService本地服务,那对应的 Service 是运行在主进程的main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。所以请不要把Service 理解成线程,它跟线程没有什么关系!
Service通常称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件:1.并不依赖于用户可视的UI界面,2.具有较长时间的运行特性。
最后
我整理了一套Android面试题合集,除了以上面试题,还包含【Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES】