最新要闻
- 旅宋壹城壹旅礼品福卡商城,百业赋能专家!
- 固态价格暴跌:什么样的性价比最高?
- 国科大录取通知书含7颗大豆:组成“北斗七星”
- 多地冲40℃!南北高温区将连成一片直到下周 网友直呼热哭了
- 超级巨大的失误深圳门将摘球脱手,朴成笑纳大礼打空门进球
- 宝马电车没人买?半年卖出4.5万台:月均7500辆羡煞新势力
- 电影《长安三万里》上映:首日票房破亿
- 取代mini LED/LCD!iPad Pro拥抱OLED:明年初量产
- 摆钟论是哪位科学家的著作?摆钟的优点缺点和原理是什么?
- 非法请求是什么意思?非法请求怎么解决?
- 卡萨帝空调欲创新吉尼斯世界纪录:24小时除湿200斤水
- 先救女友情侣送完锦旗后订婚了 网友:祝百年好合
- 使出浑身解数是什么意思?使出浑身解数的近义词有哪些?
- 峨眉派的创始人是谁?峨眉派在哪个地方?
- national是什么牌子的空调?national空调遥控器代码
- 售价5400元 宝马推出摩托车智能墨镜:50度高温也能用
广告
手机

英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌

宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌
- 宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 离婚时共同债务应该怎么处理?
- 华为云盘古大模型3.0正式发布
- 支持自动长文生成,WPS AI发布:基于大语言模型的智能办公助手
- 《街头霸王6》全球总销量突破200万份 卡普空再次为其玩家送上礼物
家电
Android架构组件LiveData
(资料图)
public class NameViewModel extends ViewModel {// Create a LiveData with a Stringprivate MutableLiveData监听LiveData数据变化,为LiveData添加观察者,如下,添加一个nameObserver,监听LiveData的数据变化,当LiveData的数据发生变化的的时候,onChanged方法会被回调,从而更新UI。currentName; public MutableLiveData getCurrentName() { if (currentName == null) { currentName = new MutableLiveData (); } return currentName; }// Rest of the ViewModel...}
public class NameActivity extends AppCompatActivity { private NameViewModel model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Other code to setup the activity... // Get the ViewModel. model = new ViewModelProvider(this).get(NameViewModel.class); // Create the observer which updates the UI. final Observer更新LiveData数据的方式,使用setValue和postValue两个方法LiveData发布修改有setValue和postValue两种方式,其中setValue只能在主线程调用,postValue则没有这个限制nameObserver = new Observer () { @Override public void onChanged(@Nullable final String newName) { // Update the UI, in this case, a TextView. nameTextView.setText(newName); } }; // Observe the LiveData, passing in this activity as the LifecycleOwner and the observer. model.getCurrentName().observe(this, nameObserver); }}
button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String anotherName = "John Doe"; model.getCurrentName().setValue(anotherName); }});应用架构中的LiveDataLiveData具有生命周期感知能力,遵循 activity 和 fragment 等实体的生命周期。您可以使用LiveData在这些生命周期所有者和生命周期不同的其他对象(例如ViewModel对象)之间传递数据。ViewModel的主要责任是加载和管理与界面相关的数据,因此非常适合作为用于保留LiveData对象的备选方法。您可以在ViewModel中创建LiveData对象,然后使用这些对象向界面层公开状态。activity 和 fragment 不应保留 LiveData 实例,因为它们的用途是显示数据,而不是保持状态。此外,如果 activity 和 fragment 无需保留数据,还可以简化单元测试的编写。扩展LiveData如果观察者的生命周期处于STARTED或RESUMED状态,LiveData 会认为该观察者处于活跃状态。以下示例代码说明了如何扩展LiveData类
public class StockLiveData extends LiveData当LiveData对象具有活跃观察者时, 会调用onActive()方法。这意味着,您需要从此方法开始观察股价更新。当LiveData对象没有任何活跃观察者时,会调用onInactive()方法。由于没有观察者在监听,因此没有理由与StockManager服务保持连接。setValue(T)方法将更新LiveData实例的值,并将更改告知活跃观察者。LiveData使用总结{private StockManager stockManager;private SimplePriceListener listener = new SimplePriceListener() {@Overridepublic void onPriceChanged(BigDecimal price) {setValue(price);}};public StockLiveData(String symbol) {stockManager = new StockManager(symbol);}@Overrideprotected void onActive() {stockManager.requestPriceUpdates(listener);}@Overrideprotected void onInactive() {stockManager.removeUpdates(listener);}}
- 创建LiveData,使用viewModel类来包含
- 创建观察者Observer
- 调用LiveData的observe方法将LiveData以及Observer建立起发布-订阅关系
- 在适当的时机调用LiveData的setValue或者postValue发布新数据通知观察者
- 能够确保数据和UI统一LiveData采用了观察者模式,当数据发生变化时,主动通知被观察者。
- 解决内存泄露问题由于LiveData会在Activity/Fragment等具有生命周期的lifecycleOwner组件调用onDestory的时候自动解绑,所以解决了可能存在的内存泄漏问题。之前我们为了避免这个问题,一般有注册绑定的地方都要解绑(即注册跟解绑要成对出现),而LiveData利用生命周期感知功能解决了这一问题,可以实现只需关心注册,而解绑会根据生命周期自动进行的功能。
- 当Activity停止时不会引起崩溃当Activity组件处于inactive非活动状态时,它不会收到LiveData数据变化的通知。
- 不需要手动处理生命周期的变化观察者并不需要手动处理生命周期变化对自身的逻辑的影响,只需要关心如何处理获取到的数据。LiveData能够感知Activity/Fragment等组件的生命周期变化,所以就完全不需要在代码中告诉LiveData组件的生命周期状态,当数据发生变化时,只在生命周期处于active下通知观察者,而在inactive下,不会通知观察者。
- 确保总能获取到最新的数据什么意思呢?第一种情况,当观察者处于active活动状态。LiveData基于观察者模式,所以当数据发生变化,观察者能够马上获取到最新变化;第二种情况,当观察者处于inactive非活动状态。LiveData只能生命周期active下发送数据给观察者。举个例子,当Activity处于后台(inactive)时,LiveData接收到了新的数据,但这时候LiveData并不会通知该Activity,但是当该Activity重新返回前台(active)时会继续接收到最新的数据。一句话概括,LiveData是粘性的。
- configuration changes时,不需要额外的处理来保存数据我们知道,当你把数据存储在组件中时,当configuration change(比如语言、屏幕方向变化)时,组件会被recreate,然而系统并不能保证你的数据能够被恢复的。当我们采用LiveData保存数据时,因为数据和组件分离了。当组件被recreate,数据还是存在LiveData中,并不会被销毁。
- 资源共享通过继承LiveData类,然后将该类定义成单例模式,在该类封装监听一些系统属性变化,然后通知LiveData的观察者。
public interface Observer{/*** Called when the data is changed.* @param tThe new data*/void onChanged(@Nullable T t);}// 注意,他是 abstract classpublic abstract class LiveData {// 只有 onStart 后,对数据的修改才会触发 observer.onChanged()public void observe(@NonNull LifecycleOwner owner, @NonNull Observer observer) {}// 无论何时,只要数据发生改变,就会触发 observer.onChanged()public void observeForever(@NonNull Observer observer) {}}
关键词:
-
-
-
-
Android架构组件LiveData
旅宋壹城壹旅礼品福卡商城,百业赋能专家!
固态价格暴跌:什么样的性价比最高?
国科大录取通知书含7颗大豆:组成“北斗七星”
多地冲40℃!南北高温区将连成一片直到下周 网友直呼热哭了
超级巨大的失误深圳门将摘球脱手,朴成笑纳大礼打空门进球
宝马电车没人买?半年卖出4.5万台:月均7500辆羡煞新势力
电影《长安三万里》上映:首日票房破亿
取代mini LED/LCD!iPad Pro拥抱OLED:明年初量产
痛苦了好几年,终于知道如何与孩子相处
摆钟论是哪位科学家的著作?摆钟的优点缺点和原理是什么?
非法请求是什么意思?非法请求怎么解决?
卡萨帝空调欲创新吉尼斯世界纪录:24小时除湿200斤水
先救女友情侣送完锦旗后订婚了 网友:祝百年好合
使出浑身解数是什么意思?使出浑身解数的近义词有哪些?
峨眉派的创始人是谁?峨眉派在哪个地方?
national是什么牌子的空调?national空调遥控器代码
【全网最细】mybatis-plus的java.lang.IllegalStateException: Failed to load ApplicationCo
售价5400元 宝马推出摩托车智能墨镜:50度高温也能用
电动车火灾频发!背后原因揭开
一瓶也包邮!海南春光一口鲜气椰汁大促:2斤9.9元速囤
ChatGPT被起诉索赔30亿!16人匿名状告OpenAI
阿迪达斯沐浴露650毫升到手25元:持久留香
银行卡盗窃一万元要判几年?银行卡盗窃罪量刑标准金额
酒店式公寓的中央空调是独立的吗?酒店式公寓的产权是多久?
重庆市如何收取房产税?重庆市房产税实施细则2023年
proe是什么软件?proe和creo的区别是什么?
php主要用于什么开发?php在云计算中的应用有哪些?
“他们好辛苦,娃娃很能干!”强降雨致山体滑坡 救援队翻山蹚水转移村民
小米继续推进降本增效:成立降本增效专项组 CFO林世伟挂帅
乘客被熊孩子薅头发弹脑壳反遭吼 弹你又怎样:网友看不下去 双方最后和解
中汽协删除16家车企承诺“不打价格战”条款:自主定价、公平竞争
常用的注意力机制模块(SE、CBAM)
伤寒论视频讲座 1一70全集郝万山(伤寒)
猴痘可能使人短期毁容:多地多人确诊 如何避免感染猴痘病毒?
世卫认定的超级致癌物黄曲霉菌!科普:比砒霜毒68倍、你身边就有
从零用python flask框架写一个简易的网站
Python多任务教程:进程、线程、协程
python中zeros函数和ones函数的详细用法
总投资约306亿元 南阳105个项目纳入2023年全省卫生健康“三个一批”项目
男子人肉占车位 雷克萨斯直接倒车撞 网友:解气但不提倡
49db智能降噪!iQOO TWS 1评测:戴上它 整个世界都安静了
被污名化太久!腾讯张立军:游戏强力推动芯片、AI等技术发展
2999元智商税“圾皇” 买完要被朋友嘲笑两年半
[初等数论]欧几里得算法:最大公因数/公因式求解算法的数学证明与程序实现
子/次模 (Submodular)、超模 (Supermodular)和模(Modular)函数
近期,四大生肖事业连走上坡路,收入节节高升,财运亨通
把充电速度带入“5G时代” 理想纯电车型搭载5C电池:不到十分钟续航400km
iPad mini唯一对手!新款联想拯救者Y700性能确认:搭载骁龙8+
李玟演唱《战歌》竟成绝唱 《斗罗大陆2》动画片头缅怀
都不买英伟达难受了:RTX 4080大降价 首次跌破1000美元!降到多少你会买?
我国新能源汽车达1620万辆 仅汽车保有量1/20 增长潜力巨大
苏州新建元控股集团董事长叶晓敏:未来REITs板块的表现依然值得期待
男生考上985研究生辞掉车企上万月薪工作:父母很支持
比亚迪汉同门兄弟!海豹DM-i要来了:20万级大杀四方
续航90公里 宝马发布全新电动摩托车CE 02:最高车速95km/h
潼关县两馆一中心预计今年12月建成
P1223 排队接水
打击乐器都有什么(打击乐器有哪些)
女子无人区遇乞食狼下车投喂 浑身瘦骨嶙峋感觉没危险:网友吐槽无知
夫妇中3亿7年后各自和新人住豪宅 网友唏嘘:果然有钱可以摧毁婚姻
上半年车市观察:几家欢喜几家愁,修炼内功迎“出海”
宝马隆重推出宝驴
杭州亚运会门票线上正式开售!购买教程出炉:官网、支付宝均可
联合国秘书长希望黑海港口农产品外运协议得以维持
中泰证券:7、8月企业排产已提升至积极 H2空调有望在低预期之下延续高增
炒菜给孕妇吃,能放什么调味料?
玉泉区昭君路街道开展“人人讲安全 个个会应急”安全生产月活动
德国5月工业产出意外下降 经济复苏前景再蒙阴霾
崇明这里,垃圾分类有了“新助手”
恒玄科技:上半年公司下游各个领域的客户需求都有所恢复
广东高考录取日程公布!7月16日开始本科批次录取
美国5月份贸易逆差达690亿美元 自俄进口商品服务月增1.3倍
茀莱堡口腔医院地址|南京种植牙价格表2023
英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌
群众转移、房屋清淤、重建选址……重庆强降雨后做了这些事
23深投02、22润置09、22润置12今日成交额位居交易所信用(非金)债券榜前三
这一天,我们不敢忘,也不能忘!
靠“抄作业”上市成功,曾经的“福建首富”,也难逃“退市”?
京源环保:7月6日公司高管季献华减持公司股份合计112.63万股
大连“科技创新+试点应用”打造普惠金融新体验
全国首列!徐州地铁3号线二期电客车亮相!
【全球市场晚报】7月7日
追光丨冬奥场馆的夏日玩法,你不想来吗?
满口种植牙多少钱[南京专业种植牙医院]茀莱堡口腔医院怎么样
文县临江镇欧家坝村灌溉渠道维修工程中标公示
一级造价师管理考试及答案一级造价工程师管理考试时间
阿斯巴甜致癌争议不休 健康减糖还能吃什么?
马斯克回应垄断火箭发射市场:SpaceX的使命是让生命多行星化
老鹰乐队告别演出
拒绝恶性竞争!比亚迪、特斯拉、蔚小理等约定不打价格战
富豪为对抗衰老上午11点后断食:曾跟17岁儿子换血 45岁拥有28岁的皮肤
Redmi Note 12 Pro宣布降价500元:8+128GB到手价1399元
40℃以上!郑州市继续发布高温红色预警信号
深圳市尚艺品工艺品有限公司销售不合格产品案
维科技术(600152):7月7日北向资金减持95.08万股
红警ol如何退出联盟 红警OL退出联盟方法
甘肃武威一公司广告词含“送领导”被罚2万?官方:属实
民科 关于民科介绍
宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选