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