У меня есть служба, которая запускается (не привязывается) к действию. Если действие уничтожается (например, нажатием кнопки "Назад" ), служба продолжает работать, это, конечно, предназначено. Однако, если я проведу активность из списка "последние приложения", служба немедленно перезапустится. Это воспроизводимо, каждый раз, когда действие/приложение вырывается из списка, появляется новый вызов службы onCreate-method. Нет звонка в onDestroy между ними!
Сначала я думал, что служба была убита андроидом, хотя я не видел причин для убийства (ни деятельность, ни служба не потребляют ресурсы, на самом деле они минималистичны и ничего не делают). Но потом я заметил, что служба действительно сбой.
V/MainActivity(856): onDestroy // swipe out of the list
I/ActivityManager(287): Killing 856:com.example.myapp/u0a10050: remove task
W/ActivityManager(287): Scheduling restart of crashed service com.example.myapp/.TestService in 5000ms
Код не примечателен, но здесь он
Активность:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v(TAG, "onCreate, starting service...");
startService(new Intent(this, TestService.class));
}
@Override
protected void onStart() {
super.onStart();
Log.v(TAG, "onStart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
//[...]
}
Услуги:
public class TestService extends Service {
private static final String TAG = "Service";
// onBind omitted
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v(TAG, "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.v(TAG, "onDestroy");
}
}
Вкратце: Мой сервис не зависит от жизненного цикла активности, но только до тех пор, пока я не удаляю приложение из списка последних приложений. В этом случае служба перезапускается, но без вызова onDestroy.
Каждый раз, когда это происходит, теряется не только состояние службы, но и работа, выполняемая службой. Я просто хочу знать, почему причиной этого является салфетка.