200斤牌面试必备:Service面试题 请安利(不停更)

目录

Q:谈一谈Service的生命周期?

Q:Service的两种启动方式?区别在哪?

Q:一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?Q:Service如何和Activity进行通信?Q:用过哪些系统Service?Q:是否能在Service进行耗时操作?如果非要可以怎么做?

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

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

Q:是否了解ActivityManagerService,谈谈它发挥什么作用?Q:如何保证Service不被杀死?


整合,非完全原创。

问题来源:厘米姑娘,部分答案来源于:这里/百度

Q:谈一谈Service的生命周期?

200斤牌面试必备:Service面试题 请安利(不停更)_第1张图片

左图显示了使用 startService() 所创建的服务的生命周期,右图显示了使用 bindService() 所创建的服务的生命周期。

 

Q:Service的两种启动方式?区别在哪?

  • 启动服务

    该服务在其他组件调用 startService() 时创建,然后无限期运行,且必须通过调用 stopSelf() 来自行停止运行。此外,其他组件也可以通过调用 stopService() 来停止服务。服务停止后,系统会将其销毁。

  • 绑定服务

    该服务在另一个组件(客户端)调用 bindService() 时创建。然后,客户端通过 IBinder 接口与服务进行通信。客户端可以通过调用 unbindService() 关闭连接。多个客户端可以绑定到相同服务,而且当所有绑定全部取消后,系统即会销毁该服务。 (服务不必自行停止运行。)

这两条路径并非完全独立。也就是说,您可以绑定到已经使用 startService() 启动的服务。例如,可以通过使用Intent(标识要播放的音乐)调用 startService() 来启动后台音乐服务。随后,可能在用户需要稍加控制播放器或获取有关当前播放歌曲的信息时,Activity 可以通过调用 bindService() 绑定到服务。在这种情况下,除非所有客户端均取消绑定,否则 stopService() 或 stopSelf() 不会实际停止服务。

 

Q:一个Activty先start一个Service后,再bind时会回调什么方法?此时如何做才能回调Service的destory()方法?
Q:Service如何和Activity进行通信?
Q:用过哪些系统Service?
Q:是否能在Service进行耗时操作?如果非要可以怎么做?

不能,因为服务在其托管进程的主线程中运行,它既创建自己的线程,也在单独的进程中运行(除非另行指定)。 这意味着,如果服务将执行任何 CPU 密集型工作或阻止性操作(例如 MP3 播放或联网),则应在服务内创建新线程来完成这项工作。通过使用单独的线程,可以降低发生“应用无响应”(ANR) 错误的风险,而应用的主线程仍可继续专注于运行用户与 Activity 之间的交互。


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


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

前台服务被认为是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。 前台服务必须为状态栏提供通知,放在“正在进行”标题下方,这意味着除非服务停止或从前台移除,否则不能清除通知。

例如,应该将通过服务播放音乐的音乐播放器设置为在前台运行,这是因为用户明确意识到其操作。 状态栏中的通知可能表示正在播放的歌曲,并允许用户启动 Activity 来与音乐播放器进行交互。

要请求让服务运行于前台,请调用 startForeground()。

 

Q:是否了解ActivityManagerService,谈谈它发挥什么作用?
Q:如何保证Service不被杀死?




 

你可能感兴趣的:([,Android与Java,],[,面试必备,])