То, что вы можете сделать в своем сервисе, - это использовать 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$)
, будут отписываться от своих соответствующих источников.
Сериализуемый
сериализуемый markable интерфейс, или мы можем звонить как пустой интерфейс. Это doesn’t имеет любые предварительные реализованные методы. Сериализуемый собирается преобразовать объект в поток байтов. Таким образом, пользователь может передать данные между одним действием к другому действию. Основным преимуществом сериализуемых является создание, и передающие данные очень легки, но это - медленный процесс, выдерживают сравнение с parcelable.
способный пакет Parcelable
быстрее, чем сериализуемый. Способный пакет собирается преобразовать объект в поток байтов и передать данные между двумя операциями. Запись пакета, способный код немного сложен, выдерживает сравнение с сериализацией. Это doesn’t создает больше временных объектов при передаче данных между двумя операциями.
Я опаздываю в ответе, но отправляющий с надеждой, что он поможет другим.
С точки зрения Скорость , 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
}
}
Serializable - это стандартный интерфейс Java. Вы просто помечаете класс как Serializable, реализуя интерфейс, и Java автоматически сериализует его в определенных ситуациях.
Parcelable - это специальный интерфейс Android, в котором вы сами реализуете сериализацию. Он был создан, чтобы быть намного более эффективным, чем Serializable, и чтобы обойти некоторые проблемы со стандартной схемой сериализации Java.
Я считаю, что Binder и AIDL работают с объектами Parcelable.
Однако вы можете использовать сериализуемые объекты в намерениях.