Android 中 Service 与 IntentService 的区别


简介

Service 是 Android 中的一个组件,它在后台运行以执行特定任务或长时间运行的操作,而无需与用户界面交互。Service 的主要目标是确保服务在后台保持活动状态,并且用户可以同时使用多个应用程序。

以下是在 Android 中实现服务的步骤

  • 创建 Service 类:第一步是创建一个扩展 android.app.Service 类的 Service 类。此类将定义服务的行为。

  • 启动服务:您需要使用一个 Intent 调用 startService() 方法来标识您要启动的服务。您可以借助 BroadcastReceiver 或 Activity 来完成此操作。

  • 停止服务:您需要使用一个 Intent 调用 stopService() 方法来标识您要停止的服务。您也可以在 Service 类中调用 stopSelf() 方法来停止服务。

  • 绑定服务:如果您希望从 Activity 或 BroadcastReceiver 与服务进行交互,则可以使用 bindService() 方法绑定服务。这允许我们通过接口与服务进行通信。

  • 解除绑定服务:在实现服务后,如果您想解除绑定服务,则应使用 unbindService() 方法解除绑定。

  • 处理服务生命周期:正确处理服务生命周期对于避免浪费资源非常必要。您可以通过在 Service 类中实现 **onCreate()、onStartCommand()、onBind()** 和 **onDestroy()** 方法来做到这一点。

以下是如何在 Android 中实现服务的代码

package com.example.java_test_application;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
   @Override
   public void onCreate() {
       super.onCreate();
       // code to initialize the Service
   }
   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
       // code to perform background tasks
       return START_STICKY;
   }
   @Override
   public IBinder onBind(Intent intent) {
       // code to bind the Service
       return null;
   }
   @Override
   public void onDestroy() {
       super.onDestroy();
       // code to stop the Service and release resources
   }
}

要启动服务,您可以使用一个 Intent 调用 **startService()** 方法来标识您要启动的服务。

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

要停止服务,您可以使用一个 Intent 调用 **stopService()** 方法来标识您要停止的服务。

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

什么是 Android 中的 Service?

Android 中的 Service 用于在后台执行特定任务,无论应用程序是否可见。它主要用于执行长时间运行的操作。服务使用 **startService()** 方法启动,并使用 **stopService()** 方法停止。

  • **前台服务** - 对用户可见的服务,或者通知用户正在进行的任务的服务,例如下载文件,用户可以看到文件正在下载,他可以暂停或恢复文件下载,这被称为前台服务。

  • **后台服务** - 这些服务不需要任何用户交互,它们本身在后台运行。此服务不会通知用户正在进行的任务。数据的存储属于后台服务,用户不知道数据是如何存储的。

  • **绑定服务** - 此服务允许应用程序组件绑定到自身。绑定服务只要任何应用程序组件绑定到它,就会执行其任务。您可以使用 bindService() 方法绑定应用程序的组件。

什么是 Android 中的 IntentService?

Intent Service 用于在后台执行异步任务。并且一旦处理完提供给它的所有任务,它就会自行停止。它主要用于执行需要在单独线程上执行的简短操作。Intent Service 不会在前台运行。

在 Android 中实现 Intent Service

步骤 1:在 AndroidManifest.xml 文件中指定 Intent Service

转到 AndroidManifest.xml 文件,并在 <application> 元素中声明服务。

<service
   android:name=".SampleIntentService"
   android:exported="false" />

步骤 2:创建一个名为 SampleIntentService 的类,该类扩展 Intentservice

import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
import android.annotation.Nullable;
public class SampleIntentService extends IntentService {
   // Constructor
   public SampleIntentService() {
      // Call superclass constructor with
      // the name of the worker thread
      super("SampleIntentService");
   }
   @Override
   protected void onHandleIntent(@Nullable Intent intent) {
      // Perform a task in the background
      Log.d("SampleIntentService", "Task in progress");
      // Simulate a long running task by
      // sleeping the thread for 5 seconds
      try {
         Thread.sleep(2000);
      } catch (InterruptedException e) {
         // InterruptedException occurs
         e.printStackTrace();
      }
      Log.d("SampleIntentService", "Task has been executed");
   }
}

覆盖 SampleIntentService 类的 **onHandleIntent()** 方法,以指定您想要在后台执行的任务。

Android 中 Service 与 IntentService 的区别

Service

IntentService

Service 是一个可用于创建服务的基类。它是一个通用类,可以在后台执行长时间运行的操作。

IntentService 是 Service 的子类,它使用工作线程按需处理异步请求(表示为 Intent)。

Service 可用于长时间和短时间任务。

IntentService 用于不需要再次运行的长时间运行的任务。

Service 可以同时处理多个请求。

IntentService 一次处理一个请求,并在请求完成后自行停止。

Service 在应用程序的主线程中运行。

IntentService 在单独的工作线程中运行。

Service 可以根据需要停止和重新启动。

IntentService 停止后无法重新启动。

Service 可以有多个启动命令。

IntentService 只有一个启动命令。

Service 可以将结果返回给调用方。

IntentService 不会将结果返回给调用方。

结论

总而言之,Service 用于执行在后台运行的长时间运行的操作。而 Intent Service 用于执行在单独线程上运行的短暂操作。

更新于: 2023年5月9日

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告