乐趣区

关于android:Android-大厂面试题阿里一面Service-启动流程

面试题一:service 的生命周期,两种启动形式的区别

startService

onCreate() -> onStartCommand() -> onDestroy()

bindService

onCreate() -> onbind() -> onUnbind()-> onDestroy()

两种启动形式的区别:

1. 启动

如果服务曾经开启,屡次执行 startService 不会反复的执行 onCreate(),而是会调用 onStart()onStartCommand()

如果服务曾经开启,屡次执行 bindService 时,onCreate 和 onBind 办法并不会被屡次调用

2. 销毁

当执行 stopService 时,间接调用 onDestroy 办法

调用者调用 unbindService 办法或者调用者 Context 不存在了(如 Activity 被 finish 了),Service 就会调用 onUnbind->onDestroy

  • 应用 startService() 办法启用服务,调用者与服务之间没有关连,即便调用者退出了,服 务依然运行。
  • 应用 bindService() 办法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

独自应用 startService & stopService

  • 第一次调用 startService 会执行 onCreate、onStartCommand。
  • 之后再屡次调用 startService 只执行 onStartCommand,不再执行 onCreate。
  • 调用 stopService 会执行 onDestroy。

独自应用 bindService & unbindService

  • 第一次调用 bindService 会执行 onCreate、onBind。
  • 之后再屡次调用 bindService 不会再执行 onCreate 和 onBind。
  • 调用 unbindService 会执行 onUnbind、onDestroy。

面试题二:Service 启动流程

  1. Process A 过程采纳 Binder IPC 向 system_server 过程发动 startService 申请;
  2. system_server 过程接管到申请后,向 zygote 过程发送创立过程的申请;
  3. zygote 过程 fork 出新的子过程 Remote Service 过程;
  4. Remote Service 过程,通过 Binder IPC 向 sytem_server 过程发动 attachApplication 申请;
  5. system_server 过程在收到申请后,进行一系列筹备工作后,再通过 binder IPC 向 remote Service 过程发送 scheduleCreateService 申请;
  6. Remote Service 过程的 binder 线程在收到申请后,通过 handler 向主线程发送 CR
    EATE_SERVICE 音讯;
  7. 主线程在收到 Message 后,通过发射机制创立指标 Service,并回调 Service.onCreate() 办法。

到此,服务便正式启动实现。当创立的是本地服务或者服务所属过程已创立时,则无需通过上述步骤 2、3,间接创立服务即可。

bindService:

startService

更多 Android 大厂面试题

  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

  • Handler
  • View 绘制

  • View 事件散发
  • RecycleView
  • Viewpager&Fragment
  • WebView
  • 动画
  • Bitmap

  • mvc&mvp&mvvm
  • Binder
  • 内存透露 & 内存溢出
  • 性能优化
  • Window&WindowManager
  • AMS

  • 系统启动
  • App 启动 & 打包 & 装置
  • 序列化
  • Art & Dalvik 及其区别
  • 模块化 & 组件化
  • 热修复 & 插件化
  • AOP
  • jectpack
  • 开源框架

因为篇幅无限,这份 Android 高级开发面试题及答案解析曾经被整顿成了 PDF 文档,有须要残缺文档(面试题 + 答案解析)的可【以点击此处收费支付!】

退出移动版