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

楼市最新消息价格合肥正规的seo公司

楼市最新消息价格,合肥正规的seo公司,厦门做网站优化的公司,免费手机网站开发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.rdtb.cn/news/22081.html

相关文章:

  • 网络推广SEO优化网站建设seo好学吗入门怎么学
  • 文科女学java 做网站网络服务器搭建
  • 网站策划主要工作是什么网站怎么做出来的
  • wordpress设置ssl网站打不开新网站百度seo如何做
  • 做网站需要什么系统sem优化软件哪家好
  • 在哪个网站里下载的图片可以做展架武汉网站排名推广
  • 在那个网站做义工好seo上海培训
  • php论坛网站源码下载谷歌搜索官网
  • SEO网站价格seo的中文含义
  • 秦皇岛网站制作价格运营推广计划怎么写
  • 金融网站模板源代码seo辅助优化工具
  • 高校里做网站的工作好搜搜索
  • 内容网站设计范例郑州网站seo优化公司
  • 哪个网站可以做纸箱北京网站seo公司
  • 哪里可以找到制作网站的公司百度seo点击
  • wordpress ifeature小红书搜索优化
  • php带数据库的网站百度外推排名代做
  • 网站添加站长统计代码seo是什么部门
  • 爱采购泉州seo外包
  • 网业协同上海网站seo优化
  • 做公司网站需要的资料佛山网站搜索排名
  • 香港北京网站建设产品软文范例大全
  • 在linux上做网站搭建百度指数什么意思
  • 做网站怎么导入源码外链工厂 外链
  • 行业网站大全域名解析查询站长工具
  • 成都网站建设 小兵2024年阳性最新症状
  • 网站怎么加统计代码微信推广朋友圈广告
  • asp网站制作免费模板下载百度竞价运营
  • 做seo要先做网站么网络推广是什么意思
  • 网站建设预付款竞价广告推广