问题标签 [android-ondestroy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
299 浏览

java - 导航离开片段后调用 onCreate 和 onDestroy

我注意到在我的 Android 应用程序中,在离开片段后,仍然调用onCreate()and方法。onDestroy()这会导致我的代码抛出异常,因为该onDestroy()方法引用了ViewModel在片段导航离开时不可用的资源(特别是 my )。

(请注意,这些不是片段和视图模型的真实名称)

为什么我onCreate()onDestroy()片段在离开它后仍然被调用?这可能是内存泄漏吗?

编辑:这是我的崩溃日志。

当片段仍然是当前片段时不会发生此异常,但仅当用户通过底部导航栏从它导航到其他片段时才会发生此异常。

编辑:澄清一下,我不是在问为什么会发生崩溃(甚至可以忽略崩溃),我想知道为什么在导航离开片段后仍然调用onCreateand方法。onDestroy该片段应该在导航离开后被销毁,但它似乎仍在运行,因为我仍然从 logcat 接收 onCreate 和 onDestroy 的日志。为什么会这样?

谢谢。

0 投票
2 回答
206 浏览

android - 如何检测应用程序何时被android中的用户关闭?

我知道,与 类不同onCreate()Application类没有onDestroy()方法。但我想知道我的应用程序何时关闭(或者它不再在屏幕上可见)。毕竟,whatsapp 和更多类似的聊天应用程序可以检测用户何时离开应用程序,并可以记录用户的最后在线时间。我想实现类似的事情。此外,当应用程序被销毁时,我想分离连接到 firebase 数据库的所有侦听器。

我已经看过这个问题,但是那里接受的答案是不可靠的。那么,onDestroy()对我来说有什么解决方法。

0 投票
1 回答
353 浏览

android-fragments - 在 onDestroyView() 上使用 FragmentStateAdapter 在 ViewPager2 中泄漏的片段

仅供参考:这个问题很简短,但以防万一我在最后添加了更多可能相关的信息。

我需要一个无限滚动的 ViewPager2,并且我想重用项目中的一个 Fragment,因为它已经被设计并且调用已经很好地建立了它的 viewLifeCycle。我也知道 VP 回收了屏幕外的 Fragments(显示的 Fragment 的 1 个偏移位置)和在任何给定时刻至少有多达 3 个片段,因此使用片段是选择。

问题是,当转到第四页时,ViewPager2 尝试删除第一个 Fragment(如预期的那样),LeakCanary 向我显示了这一点(最后是整个诊断。):

诊断从不指向我的引用,只指向 android 库引用。

在下面的代码之前,我有更多的行,但我一直在修剪它们,直到保持最低限度并且泄漏仍然存在。

扩展 FragmentStateAdapter 的 MyPagerAdapter.class:

泄漏片段:

是什么导致内存泄漏?

问题到此结束。

前言...

主视图(泄漏发生时显示的最远的 Fragment 祖先)是一个 BackStackEntry,我们从 Home Fragment 导航到该视图,该视图包含一个工具栏,其中包含有关应用程序的主要信息,下面的工具栏是这个的主要内容视图,一个具有 3 个片段的固定大小的 ViewPager2,在第一个片段上......我创建了一个“MutableFrameLayout”:

所以它可以像这样使用:

该组件是防漏的,在不同情况下进行了数小时的测试。

该组件的主要“引擎”:

……

其中 "stackFm" 是在构造函数中使用childFragmentManager.get()(" this::getChildFragmentManager")获取 FragmentManager 供应商的结果

……

……

这个想法是有一个易于使用的组件,没有什么花哨的和直接的。

基本上,放置此 MutableFrameLayout 的固定大小的 ViewPager2 的第一页(片段)可以采用 3 个不同片段的形式(取决于 DB 大小)。

泄漏的 ViewPager2 位于内部MainDBPaginationFragment2.class,但在到达 MainDBPaginationFragment2 片段之前,我们必须先通过AddElementExpandedFragment.class.

泄漏诊断(没有参考文献是我的)

0 投票
1 回答
24 浏览

java - 如果未调用活动的 onDestroy() 方法,如何更新远程数据库中的状态?

目标是在活动被破坏后更新远程数据库中的状态。困难在于,如果系统终止进程,则可以跳过活动的 onDestroy() 方法调用。onStop() 和 onPause() 方法没有意义,因为它们不能确保活动结束。其他活动中的 ActivityResult 也不起作用,因为该应用程序可能会被杀死。Service 可能是解决方案,但我担心它会与活动一起被杀死(例如,如果应用程序被强制停止,则不会调用 Service 中的 onTaskRemoved())。什么可以解决问题?

0 投票
0 回答
41 浏览

android-fragments - VideoCall应用程序与PipMode问题android

我正在开发一个像往常一样具有 VideoCall 功能的聊天应用程序。对于我的视频通话

  1. RoomActivity 和 RoomViewModel
  2. 在 RoomActivity 里面我有一个 RoomFragment,它通过 activityViewModels 拥有 RoomViewModel

RoomActivity 负责处理意图并连接到 Room

在 RoomFragment 内部,我拥有参与者和其他视图的 UI 状态

我对上述实现有两个问题

  1. 当我进入 PipMode 时,一切正常。但是,当有人单击 PipMode 窗口的关闭按钮时,呼叫并未结束。相反,pip 窗口消失了,但调用仍然存在并且可以通过通知访问。我想要的是结束通话。我可以在哪个回调中做到这一点?我应该在哪里捕捉它,在 Fragment 中还是在 Activity 中?

  2. 关闭 pipWindow 并通过通知进入 RoomActivity 后,我无法访问 UI 元素,因为从日志中可以看出,initViews 方法永远不会被调用。我应该把 initViews 放在哪里?

编辑:

当我比较其他著名和已知的聊天时,当他们的视频通话进入 PipMode 并且我按下 X 按钮时,视频通话没有结束。相反,有一个通知可供单击并返回活动。因此,关闭呼叫的唯一方法是通过 UI 元素(即使这是在 PipMode 中),而不是使用 Pip 的 X 按钮。

所以现在的帖子是关于第二个问题

0 投票
0 回答
38 浏览

java - 如何在 onDestroy() android studio 中保存分数?

我试着这样做

它不起作用

有人可以帮我吗?

它的 MyView 类 该类正在工作 问题不存在 也不是整个类的情况 它太长了