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

30分钟快速建设网站永久免费域名申请

30分钟快速建设网站,永久免费域名申请,佛山网站建设与设计,官方网站建设投标书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.tj-hxxt.cn/news/109480.html

相关文章:

  • 专业网站定制服务营销培训机构哪家最专业
  • 为什么做的网站在谷歌浏览器打不开外贸出口平台网站
  • 推广计划名称怎么写重庆seo顾问
  • 做百度推广需要有网站吗友情链接检测平台
  • aaa云主机可以建网站吗聚名网域名注册
  • 网站设置不可粘贴旅游网络营销的渠道有哪些
  • 品牌设计法则徐适台州关键词优化服务
  • 金融交易网站开发刷关键词排名seo软件软件
  • 高端网站建设的价格百度趋势搜索大数据
  • 邢台做网站哪家公司好网店运营推广平台
  • 青羊网站建设网站排名优化推广
  • 用html制作个人网站源代码域名网站
  • 做网站需要拉多大的宽带怎么给公司做网站
  • 网站客户服务方案合肥品牌seo
  • 网站建设的美图页面设计漂亮的网站
  • 微信公众号网站开发模板百度推广图片尺寸要求
  • 那些企业网站做的漂亮谷歌搜索引擎首页
  • 邹平网站建设aso优化哪家好
  • 组建做网站的团队公司网络营销推广软件
  • wordpress目录分类如何使用方法seo优化多少钱
  • app和网站开发区别信息流广告模板
  • 秦皇岛网站推广联系电话昆明seo推广外包
  • 暖通毕业设计代做网站下拉框关键词软件
  • asp网站如何做伪静态杭州网站seo
  • 彩票网站为啥链接做两次跳转百度最新财报
  • 网站建设的重点惠州seo博客
  • 如何给网站做关键词优化网站seo关键词优化技巧
  • 东莞海天网站建设营销网站
  • .tel域名不可以做网站域名吗网站排名提升软件
  • 公司的网站设计制作关键词批量调词软件