Android架构组件简介,2024年最新androidsdk环境配置

LifecycleObserver对LifecycleEvents做出反应

现在,创建一个ActivityFragment符合这一新标准,你要扩展LifecycleActivityLifecycleFragment。但是,这可能并不总是必要的,因为Android团队的目标是将这些新工具与其框架完全集成。


class MainActivity : LifecycleActivity() {

 

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

    }

}



的LifecycleObserver接收Lifecycle事件,并且可以通过注解反应。不需要方法覆盖。


class MainActivityObserver : LifecycleObserver, AnkoLogger {

   @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)

    fun onResume() {

       info("onResume")

   }

 

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)

    fun onPause() {

        info("onPause")

    }



LiveData组件

LiveData组件是一个数据持有者,包含可以观察到的值。鉴于观察者LifecycleLiveData实例化期间提供了一个,LiveData将根据Lifecycle状态行事。如果观察者的 Lifecycle 状态是 STARTED 或者 RESUMED,观察者是active; 否则就是inactive

LiveData 知道数据何时被更改,以及观察者是否active应该接收更新。另一个有趣的特性LiveData是它能够在观察者处于某种Lifecycle.State.DESTROYED 状态时将其移除,从而避免在活动和碎片观察时发生内存泄漏。

LiveData值更新过程

一个LiveData必须实现 onActiveonInactive方法。


class LocationLiveData(context: Context)

    : LiveData<Location>(), AnkoLogger, LocationListener {

    private val locationManager: LocationManager =

            context.getSystemService(Context.LOCATION_SERVICE) as LocationManager

 

    override fun onActive() {

        info("onActive")

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, this)

    }

 

    override fun onInactive() {

        info("onInactive")

        locationManager.removeUpdates(this)

    }

    // ....

}



要观察LiveData 组件,您必须致电observer(LifecycleOwner, Observer)。


class MainActivity : LifecycleActivity(), AnkoLogger {

    fun observeLocation() {

        val location = LocationLiveData(this)

        location.observe(this,

                Observer { location ->

                    info("location: $location")

                })

    }

}



ViewModel组件

新架构组件中最重要的一类是ViewModel,它用于保存与UI相关的数据,在屏幕轮换等配置更改期间保持其完整性。在ViewModel能够与交谈Repository,渐渐LiveData从它并使它又可以通过视图来观察。ViewModel也不需要对Repositoryafter配置更改进行新调用,这会对代码进行大量优化。

ViewModel对UI生命周期很紧张

要创建视图模型,请扩展ViewModel该类。


class MainActivityViewModel : ViewModel() {

 

    private var notes: MutableLiveData<List<String>>? = null    

    fun getNotes(): LiveData<List<String>> {

        if (notes == null) {

            notes = MutableLiveData<List<String>>()

            loadNotes()

        }

        return notes!!

    }

    private fun loadNotes() {

        // do async operation to fetch notes

    }

}



要从视图访问,您可以致电ViewProviders.of(Activity|Fragment).get(ViewModel::class)。此工厂方法将根据需要返回该实例ViewModel或获取保留的实例。


class MainActivity : LifecycleActivity(), AnkoLogger {

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

 

        val viewModel = ViewModelProviders.of(this)

                .get(MainActivityViewModel::class.java)

        viewModel.getNotes().observe(

                this, Observer { 

                    notes -> info("notes: $notes")

                }

        )

    }

}



Room组件

Android从一开始就支持SQLite; 然而,为了使它工作,总是需要写很多样板。此外,SQLite没有保存POJO(普通旧Java对象),也没有在编译时检查查询。一路来 Room 解决这些问题!它是一个SQLite映射库,能够持久化Java POJO,直接将查询转换为对象,在编译时检查错误,并LiveData从查询结果中生成可观察对象 。Room是一个对象关系映射 库,带有一些很酷的Android附加功能。

到目前为止,您可以完成大部分Room能够使用其他ORM Android库的功能。但是,它们都没有得到官方支持,最重要的是,它们无法产生LifeData结果。该Room库非常适合作为拟议Android架构上的持久层。

要创建Room数据库,您需要一个 @Entity持久化,可以是任何Java POJO,一个@Dao用于进行查询和输入/输出操作的接口,以及一个@Database必须扩展的抽象类RoomDatabase


@Entity

class Note {

    @PrimaryKey

    var id: Long? = null

    var text: String? = null

    var date: Long? = null

}


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/308893385b5dc7d110986944275d0d39.png)
![img](https://img-blog.csdnimg.cn/img_convert/3c2b8dc65a5ce578aaccea9e21a9fb93.png)
![img](https://img-blog.csdnimg.cn/img_convert/d7c0e95e23ec914d9d8f3c1a20f63839.png)
![img](https://img-blog.csdnimg.cn/img_convert/7e392e91f8c8b81eb0c03c6fcfb65bf6.png)
![img](https://img-blog.csdnimg.cn/img_convert/2bbf1f084f88f9fa52673e392381f6b2.png)
![img](https://img-blog.csdnimg.cn/img_convert/1c4b6caa8611d02d54a0d637655f17ea.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/46876bce92d9086bcfbe4e350e184bb7.png)



![](https://img-blog.csdnimg.cn/img_convert/2fa0d12f0ded896665920dfc5df57032.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/129768a9fda6007f2ce370f19e2cad3a.png)




**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/186528b11ce6cd5577cef2fe21646502.png)
p204888 (备注Android)**
[外链图片转存中...(img-SuCaWc4m-1712694026070)]



[外链图片转存中...(img-Ar9sD92B-1712694026070)]

[外链图片转存中...(img-1i6aehvh-1712694026070)]




**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-xQ9R8APu-1712694026070)]
  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值