【问题标题】:Oreo runs STICKY service in backgroundOreo 在后台运行 STICKY 服务
【发布时间】:2019-05-07 15:43:31
【问题描述】:

根据 Android Oreo 及以上版本的最新变化,Services 不再允许在后台运行。如果要在应用程序未运行时执行服务,则必须使用前台服务。这是否也意味着 START_STICKY 将不再起作用?

我试过下面的代码

 public class MyService extends Service {
  private static final String TAG = "MyService";

@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG, "onCreate: ");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand: ");
   new Thread(new Runnable() {
       @Override
       public void run() {
           for (int i = 0; i < 10; i++) {
               Log.d(TAG, "input : " + i);
               SystemClock.sleep(1000);
           }
       }
   }).start();
    Log.d(TAG, "onStartCommand: returning START STICKY");
    return START_STICKY;
}

@Override
public void onDestroy() {
    Log.d(TAG, "onDestroy: ");
    super.onDestroy();
  }
 }

这是一个简单的服务,它在内部创建一个线程并打印数字。

我运行这个服务(在下面的 Oreo 设备上),一旦服务开始打印数字,我就退出了应用程序。现在,我可以看到服务在几秒钟后重新启动,这是预期的。

现在我在 Oreo 设备上运行相同的代码。但是,在强制退出应用程序后,服务也会像下面的奥利奥设备一样重新启动。那么,这是否意味着 START_STICKY 将重新启动服务并且即使在 Orero 中它仍然会静默执行?限制仅适用于从后台启动新服务?

【问题讨论】:

    标签: android service


    【解决方案1】:

    如果您的应用在前台,它会暂时在白名单中,并且可以不受限制地启动服务。

    它没有指定持续多长时间,但是当您的应用置于后台时,它将从该白名单中删除,并且不再能够启动非前台服务。

    【讨论】:

    • 我强制退出应用程序,几秒钟后,我观察到服务已重新启动。既然我强制退出了应用程序,是否意味着它被列入白名单?
    • @user3339689 白名单由系统内部管理,杀掉应用不影响。在您的应用从白名单中移除并被视为闲置之前,您应该有几分钟的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多