当前位置: 首页 > 知识库问答 >
问题:

是否确保在Android的ViewModel上调用onCleared?

景光赫
2023-03-14

我可以安全地将持久化viewmodel数据的代码放入viewmodel的oncleared方法中吗?如果应用程序由于任何原因被终止或结束,那么这是否保证了ViewModel的数据将被放在持久存储中,或者是否存在不能调用oncleared的情况?

共有1个答案

潘安邦
2023-03-14

是否存在不能调用onCleared的情况?

至少,可能不会调用activity上的onDestroy()。这包括:

  • 未处理的异常
  • 用户在“设置”应用程序中单击应用程序屏幕上的“强制停止”
  • 系统在后台终止您的进程的一些情况(特别是迫切需要系统RAM的情况,如处理来电,而您的应用程序的进程“抽短稻草”终止)

所以,通常会调用oncleared(),但并不保证。

 类似资料:
  • 问题内容: 鉴于我有一个字符串列表。结果必须按照原始行的顺序排列。我想利用新的并行流。 以下代码是否 保证 结果的顺序与原始列表中的顺序相同? 问题答案: TL; DR 是的,订单得到保证。 Stream.collect()API文档 出发点是看什么决定减少是否同时发生。的描述如下: 如果该流是并行的,并且是并发的,或者该流是无序的或收集器是无序的,那么将执行并发缩减(请参阅有关并发缩减的详细信息

  • ViewModels是独立于activity/片段生命周期还是仅仅独立于其配置更改。它们何时将不再存在,随后的onCleared()方法将被调用。viewModel可以与另一个activity共享吗? 一种情况: 这种分享是否可能,是否是一种好的做法。 此外,由于应用程序生命周期回调,onpause->onstop->ondestroy对这两个程序都是相同的 1.activity旋转和 2.act

  • 问题内容: 假设我有一个事件处理程序,它对服务器进行了两次AJAX调用: 我意识到,调用回调的顺序是不确定的,因为它取决于每个请求花费的时间等。 但是,这是我的问题:是否可以保证在调用两个回调函数之前到达事件处理程序的末尾?我已经读过页面的所有Javascript都在一个线程中执行,因此我认为这意味着在可以调用任何回调之前,一定要完成我的事件处理程序。 这样对吗?还是有可能第一个请求可能已经完成,

  • SIGCHLD的维基百科页面说: 当子进程退出、被中断或中断后恢复时,SIGCHLD信号被发送给子进程的父进程。 这是否意味着当父进程向子进程发送任何信号(如 )时,它将反过来接收来自子进程的 ? 或者我误解了中断(我假设它是指接收到的任何信号),在这种情况下,哪些信号是相关的?

  • 问题内容: 我在这里读到,系统调用用于在Linux中创建线程。现在,语法的是这样的,就需要启动程序/函数地址传递给它。 但是在此页面上,此内容是内部调用的。所以我的问题是,由子程序创建的子进程如何开始运行调用后的代码部分,即它如何不需要以函数为起点? 如果我提供的链接信息不正确,请引导我找到一些更好的链接/资源。 谢谢 问题答案: 对于此类问题,请始终阅读源代码。 从glibc (GitHub)(

  • 我有一个包含片段的活动。我请求该活动给予以下联系许可: 从片段中,我请求如下摄像头许可: