Вы можете привязать свой объект Player
к жизненному циклу приложения, расширив класс Application
и сохранив там свой экземпляр. Это позволит вам иметь ссылку на него в каждом действии без утечки в течение его жизненных циклов. Вы можете проверить его значение, показать некоторую загрузку и создать обратный вызов, когда он установлен, поэтому о всех действиях можно получать уведомления.
Эта замечательная статья Codepath объясняет, как это сделать.
Ваше основное приложение может выглядеть так:
public class MyCustomApplication extends Application {
private Player player;
private ArrayList<WeakReference<OnPlayerSetCallback>> callbacks;
public void addCallback(WeakReference<OnPlayerSetCallback> callbackRef) {
this.callbacks.add(callbackRef);
}
public void removeCallback(WeakReference<OnPlayerSetCallback> callbackRef) {
this.callback.remove(callbackRef);
}
public void setPlayer(Player player) {
this.player = player;
for (WeakReference<OnPlayerSetCallback> callbackRef : callbacks) {
OnPlayerSetCallback callback = callbackRef.get();
if (callback == null) {
// remove invalid callback references (if an activity was destroyed, for example)
callbacks.remove(callbackRef);
} else {
// notify activities that a player was set
callback.onPlayerSet(player);
}
}
}
public Player getPlayer() {
return this.player;
}
interface OnPlayerSetCallback {
Player onPlayerSet();
}
}
Обновление вашего плеера не должно быть проблемой, так как каждое действие будет использовать один и тот же экземпляр. Однако, если вам нужно обновить пользовательский интерфейс без какого-либо жизненного цикла, чтобы перерисовать его между ними, вы можете создать прослушиватель обновлений в обратном вызове.