Android Binder Утечки - PullRequest
       1

Android Binder Утечки

0 голосов
/ 22 февраля 2011

Я только что прочитал http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android о том, как могут возникать утечки памяти при привязке к локальной службе ...

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

В сервисе у меня есть:

private final Binder binder=new LocalBinder();
public class LocalBinder extends Binder implements IStreamCommander {
        public void registerPlayer(IStreamListener callback) {
            theUI=callback;
        }

        public void removePlayer(IStreamListener callback) {
            theUI=null;
        }

        public void play(Station NowP) {
            playURL(NowP);
        }

        public void stop() {
            stopIt();
        }
    }

Где определяется IStreamCommander:

public interface IStreamCommander {
 void registerPlayer(IStreamListener callback);
 void removePlayer(IStreamListener callback);
 void play(Station SongID);
 void stop();
}

и IStreamListener определяется:

public interface IStreamListener {
 void updateUI(String msg, int buttons);
}

У меня тогда естьэто в упражнении:

this.bindService(startedSvc, svcConn, 0);

и

private ServiceConnection svcConn = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder binder) {
        service = (IStreamCommander) binder;
    }

    public void onServiceDisconnected(ComponentName className) {
        service = null;
    }
};

Так у меня течет память, или это нормально?

1 Ответ

6 голосов
/ 22 февраля 2011

Если вы собираетесь придерживаться схемы переплета, я бы:

  • Переместите Binder в отдельный публичный класс, а не во внутренний класс
  • Привязка с использованием getApplicationContext(), а не this
  • Убедитесь, что вы правильно используете onRetainNonConfigurationInstance() для передачи привязки между экземплярами вашей активности при изменении конфигурации (например, поворот экрана)

Вот пример проекта , демонстрирующий это.

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