问题标签 [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.
java - 导航离开片段后调用 onCreate 和 onDestroy
我注意到在我的 Android 应用程序中,在离开片段后,仍然调用onCreate()
and方法。onDestroy()
这会导致我的代码抛出异常,因为该onDestroy()
方法引用了ViewModel
在片段导航离开时不可用的资源(特别是 my )。
(请注意,这些不是片段和视图模型的真实名称)
为什么我onCreate()
的onDestroy()
片段在离开它后仍然被调用?这可能是内存泄漏吗?
编辑:这是我的崩溃日志。
当片段仍然是当前片段时不会发生此异常,但仅当用户通过底部导航栏从它导航到其他片段时才会发生此异常。
编辑:澄清一下,我不是在问为什么会发生崩溃(甚至可以忽略崩溃),我想知道为什么在导航离开片段后仍然调用onCreate
and方法。onDestroy
该片段应该在导航离开后被销毁,但它似乎仍在运行,因为我仍然从 logcat 接收 onCreate 和 onDestroy 的日志。为什么会这样?
谢谢。
android - 如何检测应用程序何时被android中的用户关闭?
我知道,与 类不同onCreate()
,Application
类没有onDestroy()
方法。但我想知道我的应用程序何时关闭(或者它不再在屏幕上可见)。毕竟,whatsapp 和更多类似的聊天应用程序可以检测用户何时离开应用程序,并可以记录用户的最后在线时间。我想实现类似的事情。此外,当应用程序被销毁时,我想分离连接到 firebase 数据库的所有侦听器。
我已经看过这个问题,但是那里接受的答案是不可靠的。那么,onDestroy()
对我来说有什么解决方法。
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
.
泄漏诊断(没有参考文献是我的)
java - 如果未调用活动的 onDestroy() 方法,如何更新远程数据库中的状态?
目标是在活动被破坏后更新远程数据库中的状态。困难在于,如果系统终止进程,则可以跳过活动的 onDestroy() 方法调用。onStop() 和 onPause() 方法没有意义,因为它们不能确保活动结束。其他活动中的 ActivityResult 也不起作用,因为该应用程序可能会被杀死。Service 可能是解决方案,但我担心它会与活动一起被杀死(例如,如果应用程序被强制停止,则不会调用 Service 中的 onTaskRemoved())。什么可以解决问题?
android-fragments - VideoCall应用程序与PipMode问题android
我正在开发一个像往常一样具有 VideoCall 功能的聊天应用程序。对于我的视频通话
- RoomActivity 和 RoomViewModel
- 在 RoomActivity 里面我有一个 RoomFragment,它通过 activityViewModels 拥有 RoomViewModel
RoomActivity 负责处理意图并连接到 Room
在 RoomFragment 内部,我拥有参与者和其他视图的 UI 状态
我对上述实现有两个问题
当我进入 PipMode 时,一切正常。但是,当有人单击 PipMode 窗口的关闭按钮时,呼叫并未结束。相反,pip 窗口消失了,但调用仍然存在并且可以通过通知访问。我想要的是结束通话。我可以在哪个回调中做到这一点?我应该在哪里捕捉它,在 Fragment 中还是在 Activity 中?
关闭 pipWindow 并通过通知进入 RoomActivity 后,我无法访问 UI 元素,因为从日志中可以看出,initViews 方法永远不会被调用。我应该把 initViews 放在哪里?
编辑:
当我比较其他著名和已知的聊天时,当他们的视频通话进入 PipMode 并且我按下 X 按钮时,视频通话没有结束。相反,有一个通知可供单击并返回活动。因此,关闭呼叫的唯一方法是通过 UI 元素(即使这是在 PipMode 中),而不是使用 Pip 的 X 按钮。
所以现在的帖子是关于第二个问题
java - 如何在 onDestroy() android studio 中保存分数?
我试着这样做
它不起作用
有人可以帮我吗?
它的 MyView 类 该类正在工作 问题不存在 也不是整个类的情况 它太长了