This property can be accessed only after the Activity is attached to the Application,
and access prior to that will result in IllegalArgumentException.
这里的意思是,如果使用扩展函数初始化的属性只能在Actiivty
添加了Application
后才能访问,在此之前的访问将会抛出IllegalArgumentException
异常
我们知道在启动Activity
会调用 Activity
的attach()
将Application
上下文对象赋予Activity
上,所以我们应该保证变量不能在 Activity
的onCreate()
之前调用就可以了
本文主要以 jetpack-activity 组件为切入点分析了该组件的主要功能,并根据源码了解了内部实现原理。
简单来说 jetpack-activity 组件有如下功能:
- 解决一些Android碎片化适配问题
- 对
Lifecycle
系列组件提供了支持 - 提供了返回键路由,对
Fragment
处理返回键提供了支持
同时 ktx 扩展组件也是对jetpack-activity 组件库的一个补充,在其他的组件库中 ktx 更是比较重要。
https://developer.android.com/jetpack
https://developer.android.com/jetpack/androidx/releases/activity
https://www.jianshu.com/p/f2aa4cf53abd
在android中启动一个活动并获得结果是一个常见的模式,这种模式已经存在很长时间了。你开始一项活动,然后倾听结果,然后根据你得到的东西做一些事情。例如,您可以启动一个活动来选择一个文档,然后获得结果(在本例中是Uri)以你的应用程序需要的方式使用它。另一种方法是使用此模式请求对某些API级别的权限。按照上述过程的方式,所使用的api是允许您使用的startActivityForResult()和 onActivityResult()在你的UI中。
Android KTX 是包含在 Android Jetpack 及其他 Android 库中的一组 Kotlin 扩展程序。KTX 扩展程序可以为 Jetpack、Android 平台及其他 API 提供简洁的惯用 Kotlin 代码。简单来说 , ktx 就是:官方地址:https://developer.android.google.cn/kotlin/ktxmaven版本号:https://mvnrepository.com/artifact/androidx.core/core-ktx添加依赖:
google 在 androidX 上对 activity 及 fragment 部分功能调整(startActivityForResult ,requestPermission,Save/Restore InstanceState,onBackPress)简化为 callback 的可回调方式
使用(暂时还会修改,建议 beta 版再更)
Jetpack 之ViewModel源码分析
官方介绍:以注重生命周期的方式管理界面的相关数据.
The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configurat...
这两天在准备写 fragment 返回栈的文章,但是发现必须先介绍一下 OnBackPressedDispatcher ,所以这是一篇介绍 what 的文章,喜欢一手资料的可以移步 官方文档
【背上Jetpack】Jetpack 主要组件的依赖及传递关系
【背上Jetpack】AdroidX下使用Activity和Fragment的变化
【背上Jetpack之Fragment】你真...
OnBackPressedDispatcher 解决了什么问题: 在 Activity 里可以通过回调方法 onBackPressed() 处理,而 Fragment / View 却没有直接的回调方法。现在,我们可以使用 OnBackPressedDispatcher 替代 Activity#onBackP
在目前的比较常见的一种场景是,在 App 的首页如果点击 back 键会 toast 提示用户再点击一次是退出 App。
例如如下代码所示:
# 首页Homectivity.java
@Override
public void onBackPressed() {
if ((System.currentTimeMillis() - exitTime) > 2000) {
ShowUtils.toast(R.string.exit_tost);//提示再按一次back