作家
登录

谷歌官方Android应用架构库——LiveData

作者: 来源: 2017-07-19 09:07:56 阅读 我要评论

  •             if (result) { 
  •                 LocationLiveData.get(getActivity()).observe(this, location -> { 
  •                    // update UI 
  •                 }); 
  •             } 
  •         }); 
  •   } 
  •  
  • 可能会有多个 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

    1. LiveData<User> userLiveData = ...; 
    2. LiveData<String> userName = Transformations.map(userLiveData, user -> { 
    3.     user.name + " " + user.lastName 
    4. });  

    ,%20android.arch.core.util.Function

    1. private LiveData<User> getUser(String id) { 
    2.   ...; 
    3.  
    4. LiveData<String> userId = ...; 
    5. LiveData<Useruser = Transformations.switchMap(userId, id -> getUser(id) );  

    应用这些转换许可在全部调用链中携带不雅察者的 Lifecycle 信息,以便只有在不雅察者不雅察到 LiveData 的返回时才运算这些转换。转换的┞封种惰性运算性质许可隐式的传递生命周期相干行动,而不必添加显式的调用或依附。

    例如:假设有一个 UI,用户输入一个地址然后会收到该地址的邮政编码。该 UI 简单的 ViewModel 可能像如许:

    1. class MyViewModel extends ViewModel { 
    2.     private final PostalCodeRepository repository; 
    3.     public MyViewModel(PostalCodeRepository repository) { 
    4.        this.repository = repository; 
    5.     } 
    6.  
    7.     private LiveData<String> getPostalCode(String address) { 
    8.        // DON'T DO THIS 
    9.        

        推荐阅读

        Windows安全协议现 LDAP & RDP 中继漏洞

      这些马脚让进击者可破解口令获取Windows凭证。Preempt合营开创人兼CEO阿基特&middot;桑切蒂称:&ldquo;威逼态势持续成长,凸显出现有安然协定中存在的马脚,这2个马脚也没什么不合。NTLM让公司企业和>>>详细阅读


      本文标题:谷歌官方Android应用架构库——LiveData

      地址:http://www.17bianji.com/lsqh/36284.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)