Android Service详解:START_STICKY, START_NOT_STICKY, START_REDELIVE...

需积分: 0 3 下载量 72 浏览量 更新于2024-08-13 收藏 312KB PPT 举报
"Android开发从零开始,讲解了Service的学习,包括Service的基本概念、使用方式以及三个常量的含义。" 在Android应用开发中,Service是一种重要的组件,它能够在后台长时间运行,执行一些不需要用户界面的任务。Service可以分为两类:启动型(Started Services)和绑定型(Bound Services)。 1. 启动型Service: 当我们使用`startService()`方法启动一个Service时,即使启动它的Activity或应用退出,Service仍然会继续运行,直到`stopService()`或`stopSelf()`被调用。Service生命周期中的关键回调方法包括`onCreate()`(首次创建时调用)、`onStartCommand()`(每次`startService()`时调用)和`onDestroy()`(服务销毁时调用)。这里提到了三个常量,用于描述`onStartCommand()`返回值,它们决定了Service被系统杀死后的行为: - `START_STICKY`:如果Service被系统因资源不足而杀死,系统会在内存条件允许时重新启动Service,但不会保留上次启动时的Intent对象。这意味着Service将从头开始执行,不恢复之前的Intent。 - `START_NOT_STICKY`:同样,如果Service被杀死,系统不会自动重启Service,除非再次调用`startService(Intent)`。这种情况下,Service只有在有新的Intent传递时才会被重新创建。 - `START_REDELIVER_INTENT`:当Service被杀死时,系统会等待一段时间,然后重新创建Service,并重新传递最后一次的Intent对象,这样Service可以继续未完成的工作。 2. 绑定型Service: 使用`bindService()`方法与Service建立连接,这种方式的服务与启动它的组件(如Activity)紧密关联。当所有与Service绑定的组件都解除绑定后,Service会被自动销毁。绑定型Service适用于需要频繁交互的情况,如实现进程间通信(IPC)。 Bound Services提供了一个接口,允许其他组件通过`IBinder`接口与其进行通信。`onBind()`方法返回这个接口,允许客户端发送请求,而`onUnbind()`则在最后一个客户端解绑时调用。由于绑定型Service仅在有绑定组件存在时运行,因此它更适合执行短暂、交互式的任务。 Service是Android应用中不可或缺的一部分,它们可以处理后台任务,保持应用在用户不直接交互时依然能运行。理解并熟练运用Service的启动和绑定方式,以及它们在被系统杀死后的恢复策略,对于开发高效、稳定的Android应用至关重要。