首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

onDestroy之后的Android ViewBinding句柄片段为空

onDestroy是Android生命周期中的一个方法,用于销毁Activity或Fragment。而Android ViewBinding是一种用于在布局文件中绑定视图的技术,它可以替代传统的findViewById方法,使得视图的访问更加方便和安全。

在onDestroy之后,ViewBinding的句柄片段为空是正常的情况。因为onDestroy表示Activity或Fragment即将被销毁,此时视图已经不再需要,因此ViewBinding的句柄片段会被释放,以便回收资源和避免内存泄漏。

在使用ViewBinding时,需要注意以下几点:

  1. 在Activity或Fragment的onCreate方法中进行ViewBinding的初始化操作,可以通过调用相应的inflate方法来获取绑定对象。
  2. 在使用完ViewBinding后,应及时释放相关资源,可以通过调用unbind方法来实现。
  3. 避免在onDestroy之后再次使用ViewBinding对象,因为此时句柄片段已经为空,可能会导致空指针异常。

ViewBinding的优势包括:

  1. 简化视图访问:使用ViewBinding可以直接通过生成的绑定对象访问布局文件中的视图,无需手动调用findViewById方法。
  2. 类型安全:ViewBinding生成的绑定对象会根据布局文件中的视图类型自动生成相应的字段,避免了类型转换的麻烦。
  3. 减少空指针异常:由于ViewBinding会在编译时进行静态检查,可以在编译阶段捕获一些常见的错误,减少运行时的空指针异常。

ViewBinding适用于各种Android应用开发场景,特别是在使用MVVM架构或者使用Fragment进行界面组合时,可以更好地管理视图的访问和绑定。

腾讯云提供了丰富的云计算产品和服务,虽然不能直接提及腾讯云的相关产品,但可以参考腾讯云的云计算解决方案,如云服务器、云数据库、云存储等,以满足不同应用场景下的需求。具体的产品介绍和链接地址可以在腾讯云官网上进行查找。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

字典禁忌:UPDATE GLOBAL_NAME为空之后的恢复

编辑手记:最近一个朋友遭遇到了这个问题,当GLOBAL_NAME被更新为空值之后,数据库无法启动,我们重温一下老熊的这个测试,记住结论,无论如何不要Update字典表。...在以前的一篇文章中( 数据库链:Database Link与GLOBAL_NAMES参数的关系 ),我提到千万不能将 Oracle 数据库的 global_name 更新为空。这不,事儿来了。...首先 UPDATE GLOBAL_NAME 为空,COMMIT 后以 abort 方式关闭数据库,以 abort 方式只是为了增加点难度。之后再启动数据库。...这里通过 DDL 的隐式提交特性来 UPDATE GLOBAL_NAME。其实还有更简单的办法:OCI 主动断开连接时的自动提交。...如果 UPDATE 之后,直接退出 sqlplus,UPDATEGLOBAL_NAME 的事务实际也提交了。看起来 ORACLE 这时只是不能执行显式的 COMMIT 语句。

1K40

ViewBinding 与 Kotlin 委托双剑合璧

ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...ViewBinding 是 Android Gradle Plugin 3.6 中新增的特性,用于更加轻量地实现视图绑定(即视图与变量的绑定),可以理解为轻量版本的 DataBinding。...1、创建和回收 ViewBinding 对象需要重复编写样板代码,特别是在 Fragment 中使用的案例; 2、binding 属性是可空的,也是可变的,使用起来不方便。...把函数 bind() 作为参数传递,bind 函数的参数为 View,返回值为 ViewBinding,与函数声明 (View) -> V 匹配。...总结 ViewBinding 是一个轻量级的视图绑定方案,Android Gradle 插件会为每个 XML 布局文件创建一个绑定类。

1.7K20
  • Android使用ViewBinding

    生成代码的方式 谷歌在 Android Studio 3.6 Canary 11 及更高版本中加入了新的视图绑定方式ViewBinding。...ViewBinding和Kotlin扩展 ViewBinding 和 Kotlin 扩展 都是 Android 开发中常用的技术,用于简化视图查找和绑定的过程。...以下是它们之间的一些比较: ViewBinding: ViewBinding 是由 Android 官方推荐和支持的库,从 Android Studio 3.6 版本开始引入。...Kotlin扩展: Kotlin扩展 是 Kotlin 语言的特性,其通过扩展函数的方式,允许开发者为现有的类添加新的函数或属性。...Kotlin扩展 对视图的数据获取和类型安全性没有提供直接的支持,需要手动处理可能的空指针异常和类型转换。 Kotlin扩展 会增加 APK 的大小,因为它是在运行时动态添加的函数。

    73621

    有趣的Viewbinding委托

    但是由于Viewbinding的特殊性,它其实就会和当前的lifecycle绑定在一起。因为我们要在销毁的情况下把实例重置为空。...作者在定义的时候就将Viewbinding委托获取的实例定义为了非空,这里我和我的同事其实是存在一些分歧的,我认为非空其实挺合理的,但是对方并不认为。...恰巧这种空非空的问题,在实际的使用中就出现了很多不可预期的crash问题。比如说在一个异步操作中获取viewbinding实例然后进行赋值操作,就会出现空指针异常。...然后当onDestroyView执行的时候就会出现空指针异常了。那么Lifecycle有没有提供一个在onDestroyView之后的方法呢?我们是不是可以考虑自己造一个呢?...(android.view.View); public static *** inflate(...); } 它只会keep实现了ViewBinding的类的bind和inflate方法。

    60721

    使用下标给string类型赋值之后,cout输出变量为空的问题。

    今天写创建文件夹的时候,怎么创建都不会,反复修改,确定错误是出在了string类型的变量上面。...,以及子文件夹,根据参数来做,有则略过,无则创建 但是我发现根本创建不了文件夹 我试着输出循环中的fileurl_s_cy[i],能够正常输出我想要的字符 但是当我输出fileurl_s_cy的时候出了问题...,fileurl_s_cy至始至终为空,长度也为空,导致无法正常创建文件夹 明明可以正常输出fileurl_s_cy[i],但是无法正常输出fileurl_s_cy,本以为是’\0’的问题,发现加上也无济于事...,所以无法使用 奇怪的是输出fileurl_s_cy[i]居然也不报错。...解决方法如下: 声明的时候改为std::string fileurl_s_cy(len,’\0’); 这样就可以正常使用下标赋值,输出以及整体输出 怕忘记,记录与此。

    5K40

    Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife

    一、新版Android Studio编译运行   下载代码之后,我们就需要在Android Studio中运行,这里我们可以使用Google官网中最新的AS版本,这里我使用的版本如下图所示:   这里的版本是海豚...最后一点,项目使用的Android SDK是28,因此会在编译过程中,提示你下载28的SDK,下载之后再编译就好了,目前我编译了20分钟,终于编译完成了。...在app的build.gradle的android{}闭包中增加如下所示代码: buildFeatures { viewBinding true //开启ViewBinding...} 然后Sync Now,下面我们以AboutUsActivity为例来修改一下,使用ViewBinding。...这个封装的核心思路就是通过编译时生成类,类继承自ViewBinding,通过泛型可以传入任何继承自ViewBinding的类,传入的类通过反射拿到具体的类,再通过类拿到里面的方法,通过方法拿到实例化之后的

    1.4K20

    要再见了吗,Kotlin Android Extension

    销毁之后的空指针 KAE 是通过在字节码层面添加合成属性来解决 findViewById 的问题的,对于 Activity 和 Fragment 而言,合成的属性背后其实就是一个缓存,这个缓存会在 Activity...的 onDestroy、Fragment 的 onDestroyView 的时候清空。...主要是在 Fragment 当中,如果不小心在 onDestroyView 调用之后访问了这些合成的属性,就会抛一个空指针异常,因为此时缓存已经被清空,而 Fragment 的 View 也被置为 null...使用 ViewBinding 作为替代方案 那么问题来了,KAE 废弃之后会怎么样呢?按照链接当中的说明来看,废弃之后仍然可以使用,但会有一个警告;当然,出现问题官方也不会再修复了,更不会有新功能。...相比之下,KAE 比 findViewById 本身提供了更简便的 方式,也保证了 View 的类型安全,但却无法保证 View 的空安全 —— 而这些问题都在 ViewBinding 当中得到了解决。

    1.8K40

    Google挖坑后人埋-ViewBinding(上)

    当然,ViewBinding也不是银弹,对比kotlin-android-extensions,它也有一些问题: 使用比kotlin-android-extensions复杂 依然有需要手动处理的场景...当然也有一些优势: Kotlin Java通吃 空安全 ViewBinding初步 ViewBinding就是为了解决kotlin-android-extensions的这些使用问题而诞生的,它的目的只有一个...要使用ViewBinding非常简单: buildFeatures { viewBinding true } 当我们开启ViewBinding之后,在编译时,AGP会自动帮我们给每个xml布局创建一个...其实没什么区别,这是为了在Kotlin中将不可空类型置空的一种妥协方式,同样的代码逻辑,在Java中,就会非常简单了。...目前还未找到现有项目从kotlin-android-extensions迁移到ViewBinding的好办法,如果当前的项目大量使用kotlin-android-extensions,那么迁移起来,就是一个巨大的工程

    2.3K20

    kotlin-android-extensions插件也被废弃了?扶我起来

    在Activity中使用ViewBinding 一旦启动了ViewBinding功能之后,Android Studio会自动为我们所编写的每一个布局文件都生成一个对应的Binding类。...虽然这里我举的例子非常简单,但实际上ViewBinding用法的套路都是如此,掌握了这一套规则之后基本上你就可以举一反三了。...假设我们有一个布局文件叫fragment_main.xml,那么启用ViewBinding功能之后,则必然会生成一个与其对应的FragmentMainBinding类。...但由于Kotlin空类型系统的存在,导致为了实现这一简单的功能,需要额外编写一些看上去很奇怪的代码,上述代码就是如此。...关于Kotlin空类型系统这里我就不展开介绍了,还不了解的朋友可以去参考《第一行代码 第3版》第2章的内容。

    3.7K31

    XPage系列|是时候抛弃ButterKnife了

    前段时间, 在观望了许久之后, 我终于更新了Android Studio的最新版本(北极狐), 发现项目中使用ButterKnife注解id的代码出现了警告,警告信息如下: Resource IDs will...这意味着如果我们把Gradle插件升级到5.0版本之后ButterKnife将无法再被使用!...目前Android项目使用gson的居多, 并且是Google开源维护的,充分相信Google的实力....下面我简单列举一下: 类型安全: ViewBinding会基于布局中的View生成类型正确的属性。...空安全: ViewBinding会检测某个视图是不是只在一些配置下存在,并依据结果生成带有 @Nullable 注解的属性。所以即使在多种配置下定义的布局文件,视图绑定依然能够保证空安全。

    65220

    Android Jetpack系列之ViewBinding和DataBinding

    ViewBinding 通过视图绑定,系统会为模块中的每个 XML 布局文件生成一个绑定类,通过绑定类,我们可以直接操作控件id,而不需要findViewById,这样我们可以避免控件id无效出现的空指针问题...首先我们新建项目,新建MainActivity,对应的布局文件名为:activity_main,在模块的build.gradle中开启视图绑定: viewBinding { enabled =...ViewBinding只是为了替代findViewById,优点就是空安全,不过有了kotlin-android-extensions之后,ViewBinding用的应该比较少了吧。...notifyPropertyChanged()发送通知,为BR 类是数据绑定生成的一个用于数据绑定的资源的 ID的类。...DataBinding和ViewBinding 到这里,我们已经可以使用基础的功能了,后续在项目开发中还需要多实践操作。

    2K20

    Android:Jetpack之视图绑定——ViewBinding

    Android Jetpack 向后兼容,是为现代设计实践而设计的,如关注点分离、测试能力、松散耦合、观察者模式、控制翻转、Kotlin集成等生产力特性。...系统进行兼容; Android KTX→ 基于Kotlin特性为Android、Jetpack提供一些简易易用的扩展; Multidex→ 为具有多个Dex文件应用提供支持; Test→ 用于单元和运行时界面测试的...(KAE),直接拿id当控件用,原理: 类中定义一个存储控件引用的HashMap,id为key,控件实例为value,当用到控件时,先查HashMap中该id对应的实例是否缓存,是返回,否findViewById...3.ViewBinding基本用法 ViewBinding的作用:代替findViewById,还可以保证空安全和类型安全,支持Java。...,还要手动置空。

    1.6K30

    Android Jetpack 之ViewBinding和DataBinding

    ViewBinding 通过视图绑定,系统会为模块中的每个 XML 布局文件生成一个绑定类,通过绑定类,我们可以直接操作控件id,而不需要findViewById,这样我们可以避免控件id无效出现的空指针问题...首先我们新建项目,新建MainActivity,对应的布局文件名为:activity_main,在模块的build.gradle中开启视图绑定: viewBinding { enabled =...ViewBinding只是为了替代findViewById,优点就是空安全,不过有了kotlin-android-extensions之后,ViewBinding用的应该比较少了吧。...notifyPropertyChanged()发送通知,为BR 类是数据绑定生成的一个用于数据绑定的资源的 ID的类。...DataBinding和ViewBinding 到这里,我们已经可以使用基础的功能了,后续在项目开发中还需要多实践操作。

    3.9K30

    Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版

    当程序编译完成之后,运行到自己手机上,先确保项目配置这一步没有问题。 二、页面设计   首先改一下主题的颜色,列如标题,改成绿色。...,如果都打开了就可以开始进行扫描蓝牙的操作了,在扫描之后先要确定蓝牙设备需要什么信息。...BaseQuickAdapter的使用,之前我是没有通过ViewBinding去进行布局绑定的,都是通过R.layout.item布局文件进行的,那么换成了ViewBinding要怎么操作呢?...然后就是扫描后的数据处理,之前里面可是啥也没有的。增加代码如下图所示: 当扫描到设备时添加到获取设备地址和设备名称,如果设备名称为null则赋值为Unkown。...然后根据地址列表的size去进行数据处理,为空直接添加,不为空则检查地址列表中是否存在之前设备地址,因为一个设备是可以被重复扫描到的,因此这是为了避免重复添加数据。

    1.8K20

    Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版

    当程序编译完成之后,运行到自己手机上,先确保项目配置这一步没有问题。 二、页面设计   首先改一下主题的颜色,列如标题,改成绿色。...,如果都打开了就可以开始进行扫描蓝牙的操作了,在扫描之后先要确定蓝牙设备需要什么信息。...BaseQuickAdapter的使用,之前我是没有通过ViewBinding去进行布局绑定的,都是通过R.layout.item布局文件进行的,那么换成了ViewBinding要怎么操作呢?...然后就是扫描后的数据处理,之前里面可是啥也没有的。增加代码如下图所示: 当扫描到设备时添加到获取设备地址和设备名称,如果设备名称为null则赋值为Unkown。...然后根据地址列表的size去进行数据处理,为空直接添加,不为空则检查地址列表中是否存在之前设备地址,因为一个设备是可以被重复扫描到的,因此这是为了避免重复添加数据。

    3K31
    领券