学习
实践
活动
工具
TVP
写文章

为什么静态方法不能使用this

JVM的运行时数据区中有个虚拟机栈(或Java栈),它的里面是由栈帧'叠加'而成.栈帧由局部变量表,操作数栈,动态连接,方法返回地址等组成. 那么我们就从局部变量表角度解答下这个问题. 详细看下两个方法的局部变量表 query方法的局部变量表,如下 shadow方法的局部变量表,如下 我们发现,非静态方法shadow的局部变量表中有this,而在静态方法query的局部变量表没有 普通方法,它的局部变量表的第一个槽存放了this, 而静态方法的局部变量表没有存放this.

15030

ViewModel 和 ViewModelProvider.Factory:ViewModel 的创建者

让我们使用 ViewModelProvider.Factory 的情况下,试着创建一个 ViewModel 看看: 活动实例化: 有没有人注意到:当我们使用 ViewModelProviders 活动实例化 MyViewModel 时,从未没用过 MyViewModel 的构造方法,而都是使用 ViewModelProviders 这个类的方法。 这是由于你实例ViewModel 对象时,不能直接在活动或者碎片中调用 ViewModel 的构造方法,而且你又想去设置 ViewModel 构造方法的参数,因此你需要将参数传入 ViewModelProvider.Factory 现在就让我们通过 ViewModelProvider.Factory 活动创建 ViewModel 实例。 我们心中有这样一些疑问,我们不能直接在活动或碎片中将值传入 ViewModel 构造方法中去,我需要写法来设置我们的参数值使其正常工作,这就是为什么我们需要 ViewModelProver.Factory

51120
  • 广告
    关闭

    11.11云上盛惠

    万元礼包限时领取,百款云产品特惠助力上云,云服务器2核2G低至4.2元/月

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ViewModel再问—字节真题

    之前我们说过一期ViewModel,但是有读者反映还是有些面试题不会回答,今天就节选一些再来看看 : ViewModel怎么实现自动处理生命周期? 为什么旋转屏幕后不会丢失状态? 为什么ViewModel可以跟随Activity/Fragment的生命周期而又不会造成内存泄漏呢? ViewModelScope了解吗? ViewModel怎么实现自动处理生命周期? 为什么旋转屏幕后不会丢失状态?为什么ViewModel可以跟随Activity/Fragment的生命周期而又不会造成内存泄漏呢? 这样也就保证了ViewModelStoreViewModel不会随Activity的重建而改变。 所以只要使用ViewModel,就可以使用 viewModelScope ViewModel 启动各种协程,而不用担心任务泄漏

    95020

    SpinnerDialog使用效果实例代码详解

    背景: 记得很久以前,碰到一个需求场景,需要在Android Dialog显示Spinner,用来进行选择操作。那个时候还很困惑,不知道是否可以这么搞。 代码演示: SpinnerDialog使用,Dialog关于view的xml布局。 <?xml version="1.0" encoding="utf-8"? ,显示出来的效果一般般,即使通过自定义item布局,调整padding,感觉效果也不是特别让人满意。 app/build.gradle添加 compile ‘com.weiwangcn.betterspinner:library:1.1.0' xml布局文件修改为: <? 总结 以上所述是小编给大家介绍的SpinnerDialog使用效果实例代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

    49010

    使用Mask-RCNN实例分割应用克服过拟合

    在这些任务,我们依靠机器的能力来识别物体。 我们经常看到的与目标识别相关的任务有4个:分类和定位、目标检测、语义分割和实例分割。 ? 我们的任务是实例分割,它建立目标检测和语义分割之上。目标检测,我们的目标是预定义的类别中标记和定位目标的所有实例。 与语义分割不同的是,实例分割为每个目标实例绘制一个单独的掩码,而语义分割将为同一类的所有实例使用相同的掩码。 本文中,我们将在一个很小的Pascal VOC数据集上训练一个实例分割模型,其中只有1349张图像用于训练,100张图像用于测试。这里的主要挑战是使用外部数据的情况下防止模型过拟合。 训练过程,将 ground truth mask缩小,用预测的mask计算损失,推理过程,将生成的mask放大到ROI的边界框大小。

    58620

    Jetpack系列——ViewModel

    避免内存泄漏。 为了证明Activity执行各生命周期时,ViewModel并不会随之变化,所以我们可以ViewModel使用Handler或者RxJava做一个定时循环任务,观测Activity是否会影响ViewModel 接下来,Activity创建出ViewModel实例对象,调用其startHandler()方法开始执行: class ViewModelActivity : AppCompatActivity() [1240] 上述代码也介绍了最重要的一个点,那就是ViewModel实例的创建,首先需要创建一个ViewModelProvider类对象,其构造方法需要传入Activity实例androidx 其他 需要注意的是,正是由于ViewModel脱离于Activity的生命周期,不建议向ViewModel传入Context引用,以避免发生内存泄漏

    13710

    再谈协程之viewmodel-livedata难兄难弟

    前言 ViewModel和LiveData最早是Google提出的AAC架构的重要成员,那么它为什么又和协程扯上关系了呢? 在这几个流程,关于生命周期的控制,是AAC架构的一大亮点,众所周知,RxJava的内存泄漏问题,会让代码变得更加复杂,但ViewModel和LiveData,依附于Lifecycle,可以完整的Activity 和Fragment等LifecycleOwner获取到正确的状态,从而避免了各种内存泄漏问题,而且可以封装到代码无感知,业务使用者完全不需要处理生命周期就可以避免大部分的泄漏简化代码的同时,也提高了性能 但这样创建的ViewModel有个小问题,我们可以看下它的源码,ViewModelProvider,它默认的NewInstanceFactory是使用反射来创建VIewModel的无参构造函数的,如下所示 函数,通过getConstructor和newInstance函数反射调用带参数的构造函数,返回ViewModel实例

    21640

    EJS模板express使用攻略及应用实例(建议收藏)

    ---- 二、快速使用EJS 1、安装ejs与express cnpm install ejs express -D 2、项目中新建demo.js: const express = require(" ---- 三、以文件形式使用模板 在上个例子,我们将模板放到变量template,数据量少的话还可以,倘若数据量比较大的话,将是一件十分恐怖的事情。 所以我们可以将模板放到文件,现在对以上示例进行改造。 1、创建views文件夹 2、views文件夹内创建one.ejs模板文件: <! <title>index.html</title></head><body>

    </body></html> 此时的效果为:页面输出当前时间 ; 九、标签使用汇总 <% '脚本' 标签,用于流程控制,无输出。

    1.2K21

    收藏 | 使用Mask-RCNN实例分割应用克服过拟合

    在这些任务,我们依靠机器的能力来识别物体。 我们经常看到的与目标识别相关的任务有4个:分类和定位、目标检测、语义分割和实例分割。 ? 我们的任务是实例分割,它建立目标检测和语义分割之上。目标检测,我们的目标是预定义的类别中标记和定位目标的所有实例。 与语义分割不同的是,实例分割为每个目标实例绘制一个单独的掩码,而语义分割将为同一类的所有实例使用相同的掩码。 本文中,我们将在一个很小的Pascal VOC数据集上训练一个实例分割模型,其中只有1349张图像用于训练,100张图像用于测试。这里的主要挑战是使用外部数据的情况下防止模型过拟合。 训练过程,将 ground truth mask缩小,用预测的mask计算损失,推理过程,将生成的mask放大到ROI的边界框大小。

    26230

    【DB笔试面试565】Oracle为什么索引没有被使用?

    ♣ 题目部分 Oracle为什么索引没有被使用? ♣ 答案部分 “为什么索引没有被使用”是一个涉及面较广的问题。有多种原因会导致索引不能被使用。 还有很多其它原因会导致不能使用索引,这个问题在MOS(MOS即My Oracle Support)“文档1549181.1为何在查询索引未被使用”中有非常详细的解释,作者已经将相关内容发布到BLOG( n 索引是否应该被使用? 二、索引本身的问题 n 索引的索引列是否WHERE条件(Predicate List)? n 索引列是否用在连接谓词(Join Predicates)? n 总体成本,表扫描的成本是否占大部分? n 访问空索引并不意味着比访问有值的索引高效? n 参数设置是否正确? 四、其它问题 n 是否存在远程表(Remote Table)? n 索引列是否使用了前置通配符(%)? n 索引列是否使用了非等值连接符? n 是否WHERE子句中对索引列进行了IS NULL值判断? n 是否查询转换失败导致不能选择索引?

    25720

    我们为什么MySQL几乎不使用分区表

    Oracle使用分区表是一种很自然的事情,数据库容量基本都是500G起,大小5T以上都是很常见的。 但是MySQL的使用,我们几乎不使用分区表,今天有同学群里一起沟通,我就按照我的理解做了梳理。 我觉得主要是使用模式的差异,我们不使用的主要原因是避免单库存储过大,而且分区表变更相对会比较麻烦,MySQL侧,我们的目标是让数据库更小巧轻量一些,可能更偏TP一些,我们目前是排除了分区表的设计,而且也明确写进了开发规范 ,如果按照数据类型来说,状态表,流水表和配置表,这三种类型也就只有流水日志表的数据都是建议使用周期表的形式进行存储,方便随时扩展,表结构变更也方便T+1的变更模式 在这个基础上,可以把这个问题转化为, 是使用分区表还是单表来存储数据?

    41650

    Android LiveData 使用详解

    实际使用,用得比较多的是 MutableLiveData。他常常结合 ViewModel 一起使用。下面,让我们一起来看一下怎样使用它? Activity 创建 ViewModel,并监听 ViewModel 里面 mNameEvent 数据的变化,当数据改变的时候,我们打印相应的 log,并设置给 textView,显示界面上。 而我们知道,通过 ViewModel of 方法创建的 ViewModel 实例, 对于同一个 fragment 或者 fragmentActivity 实例ViewModel 实例是相同的,因而我们可以利用该特点 , Fragment 创建 ViewModel 的时候,传入的是 Fragment 所依附的 Activity。 ViewModel 是同一个实例

    4K40

    ViewModel 和 LiveData:为设计模式打 Call 还是唱反调?

    ❌ 不要让 ViewModel(或Presenter)直接使用 Android 框架内的类 条件语句、循环和一般的判定等语句应该在 ViewModel 或者应用程序的其他层完成,而不是 Activity ❌ 避免 ViewModel 里持有视图层的引用 推荐使用观察者模式作为 ViewModel 层和 View 层的通信方式,可以使用 LiveData 或者其他库的 Observable 对象作为被观察者 ✅ 使用像 SingleLiveEvent 这样的 observable 来处理导航栏或者 SnackBar 显示消息这样的情况 ViewModels 的泄漏问题 响应式范例 Android 运行良好 这只会发生在系统需要资源或用户手动杀死应用程序时,如果数据仓库 ViewModel 持有对回调的引用,ViewModel 将发生暂时的内存泄漏。 ? 就像 View 和 ViewModel 之间那样。 ✅ 考虑边界情况,泄漏以及长时间的操作会对架构实例带来哪些影响。 ❌ 不要将保存原始状态和数据相关的逻辑放在 ViewModel

    1.7K30

    《Android编程权威指南》之UI状态的保存与恢复篇

    某个activity会引用其关联ViewModel,反过来则不行。一个ViewModel绝不能引用activity或view,否则会引发内存泄漏。 只activity实例对象被创建后,才需要获取和保存QuizViewModel,也就是说,quizViewModel一次只赋一个值。 通常,覆盖onSaveInstanceState(Bundle)函数,Bundle对象,保存当前activity小的或暂存状态的数据;覆盖onStop()函数,保存永久性数据,比如用户编辑的文字等。 如图设置: 不保留活动 四、ViewModel与保存实例状态 保留实例状态和ViewModel都不是长期存储解决方案。 ,使用ViewModel是方案还是很合理的。

    11810

    Android从零开始搭建MVVM架构(3)——ViewModel

    当然这些请求的回调都是相当耗时的,之前我们 Activity 或 fragment里接收这些回调。所以不得不考虑潜在的内存泄漏情况,比如 Activity 被销毁后接口请求才返回。 用法简介 ViewModel一般配合 LiveData 使用 1.获取 ViewModel 实例,通过提供的类ViewModelProviders: MyViewModel model = ViewModelProviders.of 那么问题来了 为什么横竖屏切换 ViewModel 不会 onCleared? 禁止 ViewModel 持有 Context 或 activity 或 view 的引用。 如果非得使用Context ,可以继承AndroidViewModel 类获取 ApplicationContext public class AndroidViewModel extends ViewModel

    19520

    Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

    认识 ViewModel 1.1 为什么使用 ViewModel? MVVM 模式示意图: MVI 模式示意图: ViewModel 生命周期示意图: 1.2 ViewModel使用方法 1、添加依赖: build.gradle 添加 ViewModel 正因为同一个 ViewModel 宿主使用的是同一个 ViewModelStore 映射表,因此同一个宿主上重复调用 ViewModelProvider#get() 返回同一个 ViewModel 实例 ViewModel 的内存泄漏问题 ViewModel 的内存泄漏是指 Activity 已经销毁,但是 ViewModel 却被其他组件引用。 例如: 方法 1: ViewModel#onCleared() 通知数据层丢弃对 ViewModel 回调监听器的引用; 方法 2: 在数据层使用ViewModel 回调监听器的弱引用(这要求

    7220

    为什么M1 Mac日常使用能击败Intel Mac

    日常实践,M1 Mac的使用者会很快注意到他们的ARM Mac速度异常快。主要原因之一与新CPU的设计有关。 诸如Geekbench之类的测试工具可以清楚地证明M1 Mac是一台非常快的计算机。 但是这些测试通常只能说一半,他们告诉你一台机器压力下的表现如何,但人们注意到的是Mac日常使用的表现。 但是对于新款M1 mac正常使用过程很少听到性能下降的抱怨,似乎日常使用,高性能得到了保持。 根据开发商的说法,这是由于鲜为人知的系统功能:QOS或服务质量。 这在M1 Mac上会有所变化,因为如果程序员使用QOS,他们可以M1 Mac上为其应用选择四个固定(或一个自动)级别。 英特尔Mac机也存在相同的概念,您甚至可以以后为应用程序分配更高或更低的优先级,但是经常会再次发生,后台系统进程突然减慢了您正在处理的应用程序的速度。

    8720

    三个理由告诉你,为什么TF必须使用MPLSoUDP

    在理解为什么选择MPLSoUDP之前,让我们先来看看何时需要使用MPLSoGRE。 除了这种情况以外,建议都使用MPLSoUDP! 为了理解为什么MPLSoUDP更好,我们需要回顾一下如何构建MPLSoUDP数据包。 首先将原始raw数据包添加一个mpls标签。 进行轮询操作之前,物理网卡首先在线路上接收到数据包,然后将该数据包“发送”到一个队列。为此,物理NIC在数据包上执行哈希操作。 到这里,事情应该很清楚了。 为什么转发核心之间尽可能平衡地分配流量很重要? 每个转发核心最多可以处理X个PPS(每秒数据包)。PPS间接意味着吞吐量。通常来说,PPS越高,吞吐量越高。 让我们举个例子。 https://iosonounrouter.wordpress.com/2020/09/11/why-we-must-use-mplsoudp-with-contrail/(注:原文为Contrail,本系列文章

    43620

    Jetpack组件之ViewModel

    应用开发,通常将UI交互、数据获取等业务逻辑全部写在页面,当项目需求不断增加,页面功能复杂时,页面类会显得尤为臃肿,且不宜维护。 ,每点击一次,计数器+1,ViewModel实例化是通过ViewModelProvider来完成的,它会判断ViewModel是否存在,若存在直接返回,不存在则创建。 Fragment同样实例ViewModel。 中使用ViewModel和Activity中使用类似。 需要注意的是,实例ViewModel时不要传入任何类型的Context或带有Context引用的对象,将引发内存泄漏

    11010

    为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!

    Android 应用的内存泄漏可以分为 2 类: Java 内存泄露: 不再使用的对象被生命周期更长的 GC Root 引用,无法被判定为垃圾对象而导致内存泄漏(LeakCanary 只能监控 Java 1.2 为什么使用 LeakCanary? LeakCanray 是 Square 开源的 Java 内存泄漏分析工具,用于实验室阶段检测 Android 应用中常见的内存泄漏。 即: Activity#onCreate 和 Fragment#onCreate 事件实例化一个自定义ViewModel进入 ViewModel#onClear() 方法时,通过反射获取当前作用域中所有的 以上步骤,当对象的使用生命周期结束后,会交给 ObjectWatcher 监控,现在我们来具体看下它是怎么判断对象发生泄漏的。 LeakCanary 会使用 ObjectInspector 对象检索器引用链上的节点中标记必要的信息和状态,标记信息会显示分析报告,并且会影响报告的提示。

    14510

    扫码关注腾讯云开发者

    领取腾讯云代金券