java - 即使重新启动后也保持服务始终运行

标签 java android service

我已经实现了 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);


}

最佳答案

为了确保您的服务即使在启动几个小时后也能运行,那么您必须使用 AlarmManager ,即使应用程序被终止,它也会按指定的周期重复运行。您要做的就是注册一个 PendingIntentAlarmManager 触发,该事件将由 BroadcastReceiver 接收并在 BroadcastReceiver 中code> 您将检查您的服务是否正在运行。如果正在运行,则不执行任何操作,如果没有则启动该服务。

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

为了执行此操作,您必须在 list 中授予此权限:

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

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

您应该声明您的 BroadcastReceiver 以在 Android Manifest 中捕获上述 Intent ,如下所示:

<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.

关于java - 即使重新启动后也保持服务始终运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43698568/

相关文章:

java - 如何让我的代码在运行更多代码之前稍等一下?

android - TabHost setCurrentTab 只调用一次 Tab 中 Activity 的 oncreate 方法

java - 如何在android中更改日期时间语言

java - Spring 启动日志记录

java - JSF 2.0 转换器无法从单独的 jar 文件工作

Java : Compare previous record with current record in arraylist

java - 如何通过 hadoop mapreduce 作业访问 windows/unix 目录中的文本文件

android - 根据 SecondActivity 的变化更新 First Activity 中的 TextView

android - 服务如何在后台运行 - Android

java - 使 AsyncTask(或服务)不可终止(或接近它的东西)