Android创建服务之started service详细介绍


在Android开发中,Started Service是一种在后台执行长时间运行操作而不提供用户界面的服务。它通常用于执行那些不需要与用户直接交互但需要持续进行的任务,比如播放音乐、从网络下载数据或执行文件I/O操作等。

### Started Service的基本特点

- **自动启动**:Started Service可以在应用的其他组件(如Activity)中通过调用`startService(Intent)`方法启动。

- **无限期运行**:除非被显式停止,否则Started Service会在后台持续运行。

- **不直接与用户交互**:它不会直接显示用户界面。

- **独立于启动它的组件**:即使启动它的组件(如Activity)被销毁,Started Service也会继续运行。

### 创建Started Service的步骤

1. **定义Service类**

继承`Service`类并重写`onBind(Intent intent)`方法(尽管对于Started Service来说,这个方法不会被用到,但仍需要提供)。重要的是要重写`onStartCommand(Intent intent, int flags, int startId)`方法,这是Service接收到`startService`请求时调用的方法。


   public class MyService extends Service {
       @Override
       public int onStartCommand(Intent intent, int flags, int startId) {
           // 执行任务...
           return START_STICKY; // 指示系统如果服务被杀死后,系统将在稍后尝试重新创建服务
       }

       @Override
       public IBinder onBind(Intent intent) {
           // 对于Started Service,不需要返回IBinder
           return null;
       }
   }
   

2. **在AndroidManifest.xml中注册Service**

在``标签内添加``标签来注册你的Service。


   <service android:name=".MyService" />
   

3. **启动Service**

从Activity或其他组件中,使用`Intent`和`startService(Intent)`方法来启动Service。


   Intent intent = new Intent(this, MyService.class);
   startService(intent);
   

4. **停止Service**

当Service完成任务或需要停止时,可以通过调用`stopService(Intent)`方法停止它,或者从Service内部通过调用`stopSelf()`或`stopSelf(int startId)`方法停止。


   // 从Activity停止Service
   Intent intent = new Intent(this, MyService.class);
   stopService(intent);

   // 或者在Service内部
   stopSelf();
   

### 注意事项

- 从Android O(API级别26)开始,系统对在后台运行的Service施加了更严格的限制。如果你的应用面向的是API级别26或更高,那么你需要考虑使用Foreground Service或者JobScheduler等其他后台任务处理机制。

- Started Service在后台执行任务时,可能会因为系统资源不足而被杀死。如果任务非常重要,应该考虑实现适当的恢复机制,比如监听`onStartCommand()`的返回值或监听系统广播来重新启动Service。