当前位置: 首页 > news >正文

湖北田源建设工程有限公司网站网站做系统叫什么名字

湖北田源建设工程有限公司网站,网站做系统叫什么名字,五棵松网站建设,适合代码新手做的网站1.LiveData是基于观察者模式,可以用于处理消息的订阅分发的组件。 LiveData组件有以下特性: 1) 可以感知Activity、Fragment生命周期变化,因为他把自己注册成LifecycleObserver。 2) LiveData可以注册多个观察者,只有数据…

1.LiveData是基于观察者模式,可以用于处理消息的订阅分发的组件。

 LiveData组件有以下特性:
    1) 可以感知Activity、Fragment生命周期变化,因为他把自己注册成LifecycleObserver。
    2) LiveData可以注册多个观察者,只有数据有变化,观察者就可以收到更新的数据,
         但仅限于处于活跃状态active的观察者。
    3) 在onDestroy时,LiveData会自动回收注册的观察者,不会导致Activity内存泄漏。

2.简单使用介绍:

    1)创建LiveData对象,并注册观察者。

        TextView ageTv = findViewById(R.id.age);TextView nameTv = findViewById(R.id.name);MutableLiveData<Person> liveData = new MutableLiveData();liveData.observe(this, new Observer<Person>() {@Overridepublic void onChanged(Person person) {ageTv.setText(String.valueOf(person.age));nameTv.setText(person.name);}});

  2)通过setValue改变数据:这时会调用上面的onChanged()方法,从而实现了数据驱动UI。后面会进行源码分析他的实现逻辑。

  findViewById(R.id.set_value).setOnClickListener(v -> {Person person = new Person();person.age = this.age++;person.name = "xiaohua";liveData.setValue(person);});

3)子线程中数据变化,得需要调用postValue,发送到主线程执行,因为在子线程是无法更新UI的。

 findViewById(R.id.post_value).setOnClickListener(v -> {new Thread(){@Overridepublic void run() {super.run();Person person = new Person();person.age = MainActivity.this.age++;person.name = "xiaohua";liveData.postValue(person);}}.start();});
 protected void postValue(T value) {boolean postTask;synchronized (mDataLock) {postTask = mPendingData == NOT_SET;mPendingData = value;}if (!postTask) {return;}ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);}
 private final Runnable mPostValueRunnable = new Runnable() {@SuppressWarnings("unchecked")@Overridepublic void run() {Object newValue;synchronized (mDataLock) {newValue = mPendingData;mPendingData = NOT_SET;}setValue((T) newValue);}};

如果在子线程冲调用setValue会抛出下面的异常:

  java.lang.IllegalStateException: Cannot invoke setValue on a background threadat androidx.lifecycle.LiveData.assertMainThread(LiveData.java:487)at androidx.lifecycle.LiveData.setValue(LiveData.java:306)at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)at com.example.jetpack.MainActivity$2.run(MainActivity.java:52)

4)只要数据源发生了变化,调用setValue或postValue,在LiveData注册的观察者
      就会回调onChanged方法,在这个方法中,可以接收到数据的更新。

http://www.yayakq.cn/news/211774/

相关文章:

  • 深圳哪里网站制作用户登录
  • 仙桃网站设计公司宝安中心医院是三甲医院吗
  • 西宁建设工程官方网站培训课程设计
  • 如何查看网站做没做301跳转以下哪个选项不属于网络营销的特点
  • 小贷做网站企业解决方案参考网站
  • 江苏无锡网站推广及优化网页设计实训报告2000字
  • 昆山外贸型网站制作wordpress自动封面
  • 吉安网站制作公司排名淘宝上做网站 源代码怎么给你
  • 做网站用别人的图片黄金网站app下载免费
  • wordpress 主题nextseo属于运营还是技术
  • 深圳医疗网站建设报价保定网站建设推广公司怎么样
  • 上海高端网站建设wordpress内容管理
  • 唐山网站设计外国做图网站
  • 做家宴网站中小型网站建设与管理
  • 大庆网站设计呼和浩特网站建设电话
  • 北师大 网页制作与网站建设简述网站设计的开发流程
  • 济南网站建设第六网建赣州网站建设优化服务
  • 网站的flash怎么做网站建设 软件有哪些方面
  • 在IIs下建设一个网站html网页设计代码教程
  • 中江移动网站建设网站开发微信提现功能
  • 支付宝手机网站支付前端怎么做wordpress ios源码
  • 网站设计外包有没有专门做团购的网站
  • 江西省建设网站公司网站排名快速提升
  • 网站建设网银成都三合一网站建设
  • 网站结构逻辑结构建设网站平台需要什么硬件配置
  • 装修行业网站建设个人网站建站目的
  • 城乡建设网站首页泉州网站制作案例
  • 网站建设排名的公司哪家好如何查看网站的死链接
  • 盐城网站优化方案同心县建设局网站
  • 商城网站怎么做内链动力网站建设