可能会有多个 fragment 和 activity 在不雅察 MyLocationListener 实例,LiveData 可以规范的治理它们,以便只有当它们中的任何一个可见(即处于晃荡状况)时才连接到体系办事。
LiveData 有以下长处:
- 没有内存泄漏:因为 Observer 被绑定到它们本身的 Lifecycle 对象上,所以,当它们的 Lifecycle 被烧毁时,它们能主动的被清理。
- 不会因为 activity 停止而崩溃:如不雅 Observer 的 Lifecycle 处于闲置状况(例如:activity 在后台时),它们不会收到变革事宜。
- 始终保持数据最新:如不雅 Lifecycle 从新启动(例如:activity 大年夜后台返回到启动状况)将会收到最新的地位数据(除非还没有)。
- 精确处理设备更改:如不雅 activity 或 fragment 因为设备更改(如:设备扭转)从新创建,将会急速收到最新的有效地位数据。
- 资本共享:可以只保存一个 MyLocationListener 实例,只连接体系办事一次,并且可以或许精确的支撑应用法度榜样中的所有不雅察者。
- 不再手动治理生命周期:fragment 只是在须要的时刻不雅察数据,不消担心被停止或者在停止之后启动不雅察。因为 fragment 在不雅察数据时供给了其 Lifecycle,所以 LiveData 会主动治理这一切。
LiveData 的转换
有时刻可能会须要在将 LiveData 发送到不雅察者之前改变它的值,或者须要更具另一个 LiveData 返回一个不合的 LiveData 实例。
Lifecycle 包供给了一个 Transformations 类包含对这些操作的赞助办法。
,%20android.arch.core.util.Function
- LiveData<User> userLiveData = ...;
- LiveData<String> userName = Transformations.map(userLiveData, user -> {
- user.name + " " + user.lastName
- });
,%20android.arch.core.util.Function
- private LiveData<User> getUser(String id) {
- ...;
- }
- LiveData<String> userId = ...;
- LiveData<User> user = Transformations.switchMap(userId, id -> getUser(id) );
应用这些转换许可在全部调用链中携带不雅察者的 Lifecycle 信息,以便只有在不雅察者不雅察到 LiveData 的返回时才运算这些转换。转换的┞封种惰性运算性质许可隐式的传递生命周期相干行动,而不必添加显式的调用或依附。
例如:假设有一个 UI,用户输入一个地址然后会收到该地址的邮政编码。该 UI 简单的 ViewModel 可能像如许:
- class MyViewModel extends ViewModel {
- private final PostalCodeRepository repository;
- public MyViewModel(PostalCodeRepository repository) {
- this.repository = repository;
- }
- private LiveData<String> getPostalCode(String address) {
- // DON'T DO THIS
推荐阅读
这些马脚让进击者可破解口令获取Windows凭证。Preempt合营开创人兼CEO阿基特·桑切蒂称:“威逼态势持续成长,凸显出现有安然协定中存在的马脚,这2个马脚也没什么不合。NTLM让公司企业和>>>详细阅读
本文标题:谷歌官方Android应用架构库——LiveData
地址:http://www.17bianji.com/lsqh/36284.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示