Недавно я возился с новейшей версией Android P, пытаясь запустить простой Сервис с флагом START_STICKY
.
По сути, это моя установка:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstance) {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
}
MyService.java
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate()");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy()");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Log.d(TAG, "onTaskRemoved()");
}
@Override
public void onLowMemory() {
super.onLowMemory();
Log.d(TAG, "onLowMemory()");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand()");
return START_STICKY;
}
}
Конечно, я добавил служебную запись в файл приложения AndroidManifest.
Тестируя приложение на моем старом телефоне под управлением Android Nougat, все работает как положено.
Вот так выглядит жизненный цикл после запуска приложения:
на Android N
- OnCreate ()
- onStartCommand ()
Теперь, после удаления приложения из меню «последние»:
- onTaskRemoved ()
- OnCreate ()
- onStartCommand ()
Это поведение, которое я ожидаю. Но когда я запускаю приложение на моем новом телефоне под управлением Android P DP4, жизненный цикл выглядит следующим образом при запуске приложения:
На Android P
- OnCreate ()
- onStartCommand ()
Пока ничего другого. Но когда я очищаю приложение из недавнего меню:
- onTaskRemoved ()
- OnCreate () * * тысяча пятьдесят-одна
- OnDestroy ()
Благодаря флагу START_STICKY
служба перезапускается, но мгновенно уничтожается, даже до того, как появится возможность запустить метод onStartCommand
.
Есть ли какие-либо изменения, о которых я не знаю? Единственные изменения в сервисе, которые я могу найти, документированы здесь . И это только описывает, что службе переднего плана теперь требуется определенное разрешение для работы. Однако я работаю в фоновом режиме, и, таким образом, эта информация мне не нужна.
Кто-нибудь сталкивался с подобными проблемами?
Заранее спасибо!