有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使服务始终运行,即使在重新启动后也是如此

我已经执行了START_STICKY命令,但是服务在几个小时后被终止。我想做的是让服务始终在后台运行,并在设备重新启动时重新启动。我可以像这样用onDestroy方法重新启动服务吗?还是有更方便的方法

 @Override
public void onDestroy() {

   Stop();

    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();

    Intent i= new Intent(getApplicationContext(), MyService.class);
    startService(i);


}

共 (1) 个答案

  1. # 1 楼答案

    为了确保您的服务在启动数小时后仍在运行,您必须使用AlarmManager,即使应用程序被终止,它也会在指定的周期内重复运行。您将要做的是注册一个PendingIntent以启动AlarmManager,它将被BroadcastReceiver接收,并在BroadcastReceiver中检查您的服务是否正在运行。如果正在运行,则不执行任何操作,如果不执行,则启动服务

    What I want to do is keep a service running always in the background and restart even when the device is rebooted.

    为此,您必须在清单中授予此权限:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    

    然后,您必须创建一个自定义BroadcastReceiver,它将检查要激发的意图,即Action.BOOT_COMPLETED

    您应该声明您的BroadcastReceiver在Android清单中捕获上述意图,如下所示:

    <receiver android:name="com.example.MyBroadcastReceiver">  
      <intent-filter>  
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
      </intent-filter>  
    </receiver>
    

    现在,您可以在BroadcastReceiver类中初始化AlarmManager,也可以编写代码立即启动服务

    有关AlarmManager的信息,请参见here

    Disclaimer: Starting from Android O, Google will stop supporting Unbound Background Service and calling startService() will become Illegal(Android will throw IllegalStateException) when calling this function.