Таргетинг и построение с уровня API 4 и выше.
Сейчас я имею дело с проблемой, в которой я пытаюсь сохранить привязки к моей локальной службе в нескольких действиях и остановить службу, когда последнее соединение не установлено.
В двух словах, моя служба просто вызывает системную службу в HandlerThread, которая быстро возвращается к BroadcastReceiver, а затем снова выполняет тот же вызов после ожидания предварительно определенного количества времени (не менее 15 секунд).
Предположим, у меня есть базовое действие: создайте первую связь со своим сервисом в onCreate () следующим образом:
Intent service = new Intent(ActivityA.this, MyLocalService.class);
getApplicationContext().bindService(service, mConnection, BIND_AUTO_CREATE);
Предположим также, что из-за того, что я поддерживаю привязку к поворотам экрана, перенося связыватель и соединение, я не отсоединяюсь от службы до завершения действия:
// onRetainNonConfigurationInstance переносит мое связующее и соединение, так как я привязан к контексту приложения, поэтому они являются честной игрой.
public void onDestroy(){
super.onDestroy();
//using binder, remove callback to service from current activity
if(isFinishing(){
getApplicationContext().unbindService(mConnection);
}
}
Я в значительной степени делаю эту настройку для любой другой Деятельности, которая хочет прослушивать сервис.
Моя проблема заключается в том, что в конечном итоге некоторые действия не мгновенно связываются, поэтому служба все равно будет зависать в соответствии с поведением шаблона привязки / отмены привязки, если служба создается автоматически. Мне пришлось пойти так далеко, что остановил свой поток, прежде чем отменить привязку к последнему действию, что предотвратило вызов любых системных служб в BG. Есть ли лучший способ управления службами привязки и отмены привязки, или я делаю все возможное с моей текущей настройкой? Кроме того, поскольку на мою службу (через связыватель) ссылаются слабо, уменьшит ли это мой риск утечки памяти?