Android: служба уничтожается при повороте дисплея

У меня есть служба, работающая в отдельном процессе. Я обнаружил, что после выхода потока пользовательского интерфейса основного процесса из onDestroy () моя служба уничтожается, хотя я предоставил контекст приложения с привязкой и указал BIND_AUTO_CREATE.

В потоке пользовательского интерфейса основного процесса onCreate ( ) У меня есть этот код привязки:

Intent intent = new Intent(mAppContext, MyService.class);
mAppContext.bindService(intent, mMyServiceConnection, Context.BIND_AUTO_CREATE);

В моем основном процессе "UI thread onDestroy () I" у нас есть код отмены привязки:

mAppContext.unbindService(mMyServiceConnection);

Обратите внимание, что я никогда не вызываю stopService ().

В документации Android для bindService () говорится:

Служба будет считаться необходимой системой только до тех пор, пока существует вызывающий контекст .

Если я правильно это понимаю, поскольку я предоставил контекст приложения, служба считается необходимой для системы в течение всего срока службы приложения.

Я подумал, что, возможно, контекст приложения умирает с onDestroy () . Вот что говорится в документации Android для getApplicationContext ():

Возвращает контекст единственного глобального объекта Application для текущего процесса.

Если контекст приложения умирает с onDestroy (), то я думаю, что у Android есть большая проблема . Проблема в том, что при повороте дисплея вызывается onDestroy () (за которым сразу следует onCreate ()). Таким образом получается, что когда дисплей поворачивается - а в моем случае это происходит довольно часто! - моя служба всегда завершается.

Обратите внимание, что pid процесса моего приложения никогда не изменяется, то есть это тот же процесс. Это важно в свете документации для getApplicationContext (), указывающей «текущий процесс».

Вот что показывают мои журналы отладки:

04-03 05: 15: 12.874: DEBUG / MyApp (841): main onDestroy
04-03 05: 15: 12.895: DEBUG / MyApp (847): служба onUnbind
04-03 05: 15: 12.895: DEBUG / MyApp (847): служба onDestroy
04-03 05: 15: 12.934: DEBUG / MyApp (841): main onCreate
04-03 05: 15: 12.966: DEBUG / MyApp (847): служба onCreate
04-03 05: 15: 12.975: DEBUG / MyApp (847): service onBind

Итак, мои вопросы:

1) Верно ли мое понимание привязки / отмены привязки?

2) Есть ли способ не уничтожить ли мою службу при вызове onDestroy () потока пользовательского интерфейса?

Уловка для ответа на вопрос №2 - никогда не отменять привязку. Но мне это не нравится, потому что при каждом вызове onDestroy () происходит утечка привязки. Я мог «вспомнить», что у меня произошла утечка привязки, и утечка только этого, но затем у меня есть каскадные хаки, и это действительно ужасно.

5
задан Syrinx 3 April 2011 в 06:08
поделиться