Services 篇

版权声明:该博客为博主原创,转载请标明出处! https://blog.csdn.net/DJH2717/article/details/82933557

1, 谈一谈Service的生命周期? 

答:

  • services 的生命周期方法有 onCreate , onStartCommand, onBind , onUnBind, onDestory. 
  • 当我们采用 start 方式第一次启动一个服务后, 会调用到 onCreate 和 onStartConmmand 方法, 后续再使用 start 启动只会 调用到 onStartCommand , 而且此方式启动的服务在 activity 退出, 如果没有手动调用 stop , 服务仍然会在后台运行, 多次调用 start 启动的服务, 只需要调用一次 stop , 便会回调 onDestory 停止服务.
  • 采用 bind 方式启动的服务, 如果当前服务没有运行, 那么也会调用 onCreate 方法, 否则只会调用到 onBind, 此后在此调用 bind 启动服务, onBind 将不会再次调用, 需要注意的是, bind 方式启动服务不能用在一个广播接收器中, 多次 unBind 一个服务会抛出异常, 还有就是 bind 方式启动的服务, 当 activity 被 stop 后, 服务不会继续运行直到 activity 被再次 resume.
  • 对于被 start 和 bind 方式同时启动了的服务, 只有当这个服务被调用了 stop 和所有捆绑了这个服务的 client 都调用了 unBind 时, 这个服务才会回调 onDestory 来停止.

2, Service的两种启动方式?区别在哪?

答:  services 启动方式有 start 和 bind 两种方式, 其中 start 方式启动的 service 不能获取任何和服务有关的信息, 也就是说无法和服务进行通信,  而 bind 方式可以, 常见的使用 AIDL 来进行通信就必须采用 bind 方式启动服务.  还有就是两种方式启动服务时, 回调的生命周期有所不同.

3, 一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?

答: 只会回调到 services 的 onBind 方法, 此时需要同时调用 stopServices 和 unBinder 才能让该 services destroy.

4, Service如何和Activity进行通信?

答: 要想让 Services 和 activity 进行通信, 采用 bind 方式启动 service, 获取到 binder 对象, 然后进行通信, 只不过在一般情况下, 这个 binder 并没有用来实现跨进程通信,  如果需要跨进程通信, 可以采用 AIDL.

5, 前台服务是什么?和普通服务的不同?如何去开启一个前台服务?

答: 前台服务是指 会在 通知栏显示的服务, 会让用户知道当前服务正在运行, 其优先级会比后台服务要高, 在系统内存不足时, 不会被杀死.

通过在 服务的 onStartCommand 方法中使用 startForeground();  来启动一个前台服务,  启动和就和通知一样, 会在 状态栏显示, 但是其不可以被移除, 直到服务停止或者变成后台服务.

6, 如何保证Service不被杀死?

答: 在 Android 系统中, 当内存不足时, 会按照进程的优先级逐一杀死进程, 在五个进程优先级中, 我们可以尽可能的提高 services 所处的进程的优先级来保证 services 不被杀死的可能性, 具体的方法有:

  1. 把服务变成前台服务, 从而使进程成为前台进程
  2. 尽可能的减少服务所在的进程的内存占用量.
  3. 在服务的 onDestory 中重启服务.
  4. 在Service的onStartCommand()中设置flages值为START_STICKY,使得Service被杀死后尝试再次启动Service

7,是否了解 ActivityMangerServices, 谈谈其发挥的作用?

答: AMS 是 Android 系统中管理系统组件的一项核心系统服务, 虽然其名字带有 Activity , 但是其并不是指对 activity 进行管理, 其主要作用有:

  • 负责四大组件的创建和生命周期的管理.
  • 负责应用进程的创建与销毁.
  • 负责应用进程的优先级管理.
  • 对Android系统内存的管理.
  • 近期任务和回退栈的管理.
  • 提供运行时的状态管理和查询的接口.



Q:AlarmManager能实现定时的原理?

猜你喜欢

转载自blog.csdn.net/DJH2717/article/details/82933557