Недавно я возился с новейшей версией 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
- при создании()
- onStartCommand ()
Теперь, после удаления приложения из меню недавних:
- onTaskRemoved()
- при создании()
- onStartCommand ()
Это поведение, которое я ожидаю. Но когда я запускаю приложение на своем новом телефоне под управлением Android P DP4, жизненный цикл при запуске приложения выглядит следующим образом:
На Android P
- при создании()
- onStartCommand ()
Пока ничем не отличается. Но когда я удаляю приложение из недавнего меню:
- onTaskRemoved()
- при создании()
- onDestroy()
Благодаря флагу START_STICKY
сервис перезапускается, но мгновенно уничтожается, даже до того, как у него появляется возможность запустить метод onStartCommand
.
Есть какие-то изменения, о которых я не знаю? Единственные изменения, связанные со службой, которые я смог найти, задокументированы здесь. И это только описывает, что службе переднего плана теперь требуется специальное разрешение для работы. Однако я запускаю фоновую службу, и поэтому эта информация кажется мне неактуальной.
Кто-нибудь сталкивался с подобными проблемами?
Заранее спасибо!
onCreate()
и посмотрите, поможет ли это. Я предполагаю, что вы видите изменения, которые были введены в Android 8.0 в отношении фоновых служб. - person CommonsWare   schedule 04.07.2018