Из ответа Свена:
Я решил эту проблему, посчитав ссылки на привязку службы в Приложении.Каждое действие должно вызывать acquBinding () в своих методах onCreate () и вызывать releaseBinding () в onDestroy ().Если счетчик ссылок достигает нуля, привязка освобождается.
Я согласен, НО вам не следует делать это в onDestroy - это часто не будет вызываться.
Вместо этого я предлагаюследующее (на основе вашего примера кода) ...
// Base Activity for all other Activities
abstract class MyBaseActivity extend Activity {
protected MyApp app;
protected Binding binding;
@Override
public void onCreate(Bundle savedBundleState) {
super.onCreate(savedBundleState);
this.app = (MyApp) getApplication();
this.binding = this.app.acquireBinding();
}
@Override
protected void onPause() {
super.onPause();
// Pre-HC, activity is killable after this.
if ((11 > Build.VERSION.SDK_INT) && (isFinishing()))
onFinishing();
}
@Override
protected void onStop() {
super.onStop();
if ((10 < Build.VERSION.SDK_INT) && (isFinishing()))
onFinishing();
}
protected void onFinishing() {
// Do all activity clean-up here.
this.app.releaseBinding();
}
}
НО, мое использование isFinishing () - всего лишь мысль - я не уверен, что это надежно.Возможно, onPause / onStop вызывается с isFinishing () false, но затем действие уничтожается - и ваш releaseBinding () никогда не вызывается.
Если вы избавляетесь от проверки isFinishing, я думаю, вам нужно переместить acquBinding() вызовите onCreate для onStart / onResume (в зависимости от версии SDK), чтобы убедиться, что ваш счетчик ссылок не испортился.
Кто знал, что выпуск службы вашего приложения будет настолько сложным!