Android: различие между Parcelable и сериализуемый?

То, что вы можете сделать в своем сервисе, - это использовать BehaviourSubject для хранения значений, но представить его как Observable.

Вот цитата из документов, подробно описывающая, что такое BehaviourSubject

Один из вариантов Subjects - это BehaviorSubject, который имеет понятие «текущее значение». Он хранит последнее значение, отправленное его потребителям, и всякий раз, когда новый Observer подписывается, он немедленно получает «текущее значение» от BehaviorSubject

blockquote>

. См. здесь для получения дополнительной информации.

Сервисный код:

private _user$ = new BehaviourSubject(null); // initially null

constructor(private http: HttpClient, private router: Router) {
  this.userChangeSet.subscribe(val => this._user$.next(val))
}

get user$ () {
  return this._user$.asObservable();
}

Тогда вы можете использовать его как обычно в вашем компоненте.

this.service.user$.subscribe(v => {
  // do stuff here
})

Обратите внимание, что первое значение, которое получит компонент, будет нулевым, поскольку это начальное значение BehaviourSubject.

РЕДАКТИРОВАТЬ:

В компоненте

private _destroyed$ = new Subject();

public ngOnDestroy (): void {
    this._destroyed$.next();
    this._destroyed$.complete();
}

А затем для подписки

this.service.user$.pipe(
  takeUntil(this._destroyed$)
).subscribe(v => {
  // do stuff here
})

То, как это работает, заключается в том, что когда уничтоженный объект $ испускает, наблюдаемые, которые передали takeUntil(this._destroyed$), будут отписываться от своих соответствующих источников.

289
задан live2dream95 12 April 2018 в 02:53
поделиться

3 ответа

Сериализуемый

сериализуемый markable интерфейс, или мы можем звонить как пустой интерфейс. Это doesn’t имеет любые предварительные реализованные методы. Сериализуемый собирается преобразовать объект в поток байтов. Таким образом, пользователь может передать данные между одним действием к другому действию. Основным преимуществом сериализуемых является создание, и передающие данные очень легки, но это - медленный процесс, выдерживают сравнение с parcelable.

способный пакет Parcelable

быстрее, чем сериализуемый. Способный пакет собирается преобразовать объект в поток байтов и передать данные между двумя операциями. Запись пакета, способный код немного сложен, выдерживает сравнение с сериализацией. Это doesn’t создает больше временных объектов при передаче данных между двумя операциями.

0
ответ дан 23 November 2019 в 01:45
поделиться

Я опаздываю в ответе, но отправляющий с надеждой, что он поможет другим.

С точки зрения Скорость , Parcelable > Serializable. Но, Пользовательский сериализуемый исключение. Это находится почти в диапазоне Parcelable или еще больше быстрее.

Ссылка: https://www.geeksforgeeks.org/customized-serialization-and-deserialization-in-java /

Пример:

Пользовательский Класс, который будет сериализирован

class MySerialized implements Serializable { 

    String deviceAddress = "MyAndroid-04"; 

    transient String token = "AABCDS"; // sensitive information which I do not want to serialize

    private void writeObject(ObjectOutputStream oos) throws Exception {
        oos.defaultWriteObject();
        oos.writeObject("111111" + token); // Encrypted token to be serialized
    }

    private void readObject(ObjectInputStream ois) throws Exception {
        ois.defaultReadObject(); 
        token = ((String) ois.readObject()).subString(6);  // Decrypting token
    }

}
0
ответ дан 23 November 2019 в 01:45
поделиться

Serializable - это стандартный интерфейс Java. Вы просто помечаете класс как Serializable, реализуя интерфейс, и Java автоматически сериализует его в определенных ситуациях.

Parcelable - это специальный интерфейс Android, в котором вы сами реализуете сериализацию. Он был создан, чтобы быть намного более эффективным, чем Serializable, и чтобы обойти некоторые проблемы со стандартной схемой сериализации Java.

Я считаю, что Binder и AIDL работают с объектами Parcelable.

Однако вы можете использовать сериализуемые объекты в намерениях.

177
ответ дан 23 November 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: