现在,创建一个Activity
或Fragment
符合这一新标准,你要扩展LifecycleActivity
或LifecycleFragment
。但是,这可能并不总是必要的,因为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
组件是一个数据持有者,包含可以观察到的值。鉴于观察者Lifecycle
在LiveData
实例化期间提供了一个,LiveData
将根据Lifecycle
状态行事。如果观察者的 Lifecycle
状态是 STARTED
或者 RESUMED
,观察者是active
; 否则就是inactive
。
LiveData
知道数据何时被更改,以及观察者是否active
应该接收更新。另一个有趣的特性LiveData
是它能够在观察者处于某种Lifecycle.State.DESTROYED
状态时将其移除,从而避免在活动和碎片观察时发生内存泄漏。
一个LiveData
必须实现 onActive
和 onInactive
方法。
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
也不需要对Repository
after配置更改进行新调用,这会对代码进行大量优化。
要创建视图模型,请扩展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)]