【发布时间】: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 中它仍然会静默执行?限制仅适用于从后台启动新服务?
【问题讨论】: