Android AIDL проблема с активностью и сервисом - PullRequest
0 голосов
/ 31 августа 2011

Я пишу приложение для Android 2.1, которое должно отображать диалоговое окно для пользователя, когда внешнее событие вызывает один из GPIO. Я написал драйвер устройства Linux и написал интерфейс пользовательского пространства JNI. Когда мое приложение запускается, оно запускает удаленную службу, которая опрашивает драйвер устройства. С помощью aidl мне удалось установить связь между действием и службой, однако, когда я закрываю действие, я хочу, чтобы служба повторно запустила действие. Я добился этого, используя следующий код: (в сервисе)

Intent dialogIntent = new Intent(getBaseContext(),WiegandDemoActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);

Сразу после этого я хочу общаться с помощью aidl, поэтому я использовал:

synchronized (listeners) {
for (WiegandListener listener : listeners) {
    try {
         listener.handleWiegandUpdated();
...

Активность переносится на передний план, но сообщение об этом не доходит. почему это происходит? (когда активность впереди, все работает нормально)

Я не хотел публиковать здесь весь код, потому что он большой, но если вам нужна дополнительная информация, не стесняйтесь спрашивать.

Спасибо.

1 Ответ

0 голосов
/ 02 сентября 2011

Вам нужно будет повторно привязать к удаленному Activity.Целесообразно ли регистрировать активность в службе при ее запуске - поэтому код обновления запускается, когда вы знаете , что новая активность готова принимать входящие сообщения?

Также убедитесь, чтоотменить регистрацию прослушивателя событий, когда ваша деятельность закрывается - в противном случае она зависает.Если он содержит ссылку на фактическое действие, то все действие остается в памяти и не получает сборщик мусора (даже если он закрыт и вы создали новое).

...