Android: как получить указатель на Сервис? - PullRequest
1 голос
/ 29 декабря 2011

У меня есть приложение с Service. Эта служба запускает рабочий Thread, и этот поток нуждается в указателе на экземпляр службы (он вызывает некоторые методы этой службы).

Теперь я просто передаю указатель this из метода Service onCreate() в свой собственный конструктор Runnable, но он работает правильно, пока я не закрою свое приложение. Когда приложение перезапускается, с указателями что-то становится не так. Я до сих пор не могу понять, что именно не так, но похоже, что указатель на мой экземпляр Service - это указатель на странный другой экземпляр Service, и указатель на мой Runnable тоже неверен.

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

Я подозреваю, что я не могу передать указатель this из метода onCreate() Сервиса, но тогда как я могу получить указатель на экземпляр моего Сервиса из потока, который начинается с метода onCreate()?

ОБНОВЛЕНИЕ : Я только что понял, что у меня точно такой же одиночный выпуск . Runnable был синглтоном. Но я до сих пор не могу найти хорошего решения, кроме как вообще не использовать синглтоны в Android. Может быть, есть предложения?

1 Ответ

1 голос
/ 29 декабря 2011

этому потоку нужен указатель на экземпляр службы (он вызывает некоторые методы этой службы).

В Java нет указателей. Эквивалентом Java будет «ссылка на объект».

пока я не закрою свое приложение

В Android не существует такого понятия, как «закрытие» приложения.

Я до сих пор не могу понять, что именно не так, но похоже, что указатель на мой экземпляр Service - это указатель на странный другой экземпляр Service, и указатель на мой Runnable тоже неверен.

Это в высшей степени возможно, если вы остановили оригинальный Service и слили нить, а затем снова запустили Service. Возможно, у вас есть два потока, один из которых содержит несуществующую копию вашего Service.

как я могу получить указатель на экземпляр моей службы из потока, который начинается с метода onCreate ()?

Это не твоя проблема. Ваша проблема, что бы это ни было, лежит в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...