在实现服务时,START_STICKY 和 START_NOT_STICKY 有什么区别?


简介

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

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

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

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

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

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

  • 处理服务生命周期:正确处理服务生命周期对于避免浪费资源至关重要。您可以通过在服务类中实现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中的START_STICKY?

START_STICKY是Android中的一种服务,如果它因内存不足而被终止或停止,系统将重新启动它。当服务重新启动时,onStartCommand()方法将被调用,并传入一个空Intent。这对于执行后台任务(例如播放音乐或监控传感器)的服务很有用。当服务被重新启动时,系统将使用空Intent调用onStartCommand()方法。这允许服务从其被终止或停止之前的地方继续其操作。

以下是如何在Android应用中使用START_STICKY启动服务

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

START_STICKY是一种用于执行后台任务的有用服务。即使用户切换到另一个应用程序或设备,这些服务也需要继续在后台运行。通过使用START_STICKY,您可以确保即使服务被终止或停止,它也会继续运行。

什么是Android中的START_NOT_STICKY?

START_NOT_STICKY是Android中的一种服务,如果它被终止或停止,系统将不会重新启动它。它适用于执行特定任务并且不需要在后台继续运行的服务。它用于执行不需要在后台运行的一次性操作。

以下是如何在Android应用中使用START_NOT_STICKY启动服务

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

结论

总之,START_STICKY用于需要在后台继续运行的服务,即使它们被终止或停止;而START_NOT_STICKY用于执行特定任务并且不需要继续运行的服务。

更新于: 2023年5月9日

2K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告