gpt4 book ai didi

android - 为什么在我的 Activity 调用 ondestroy 之后,我仍然看到来自被销毁的同一个 Activity 的 Toasts

转载 作者:搜寻专家 更新时间:2023-11-01 08:25:32 24 4
gpt4 key购买 nike

我有一个 Android 应用程序,当用户打开我的应用程序时,我首先会显示 Splashscreen然后该用户导航到 HomeActivity .

现在实际上我看到了一件奇怪的事情发生在ondestroy()之前我的功能 Splashscreen我正在调用一个正在调用 Toast 的函数并制作progressBar GONE但问题是,我在循环中错误地调用了这个函数,所以发生的事情是调用了我的 Splashscreen ondestroy 函数,我的 HomeActivity 正在显示,但仍然一次又一次地从 Splashscreen 显示 Toasts。

现在我的问题是,在破坏 Splashscreen 之后为什么 android 没有给我错误,因为我正在引用 Toast and ProgressBar它绑定(bind)到 Splashscreen,所以它一定会给我错误。

而且,如果它不应该给我错误,那么请告诉我这里工作的概念是什么,我不知道。 不是我们在 Activity 类中创建的所有变量都只绑定(bind)到该 Activity ,当该 Activity 被销毁时,它们也会被销毁 ??

下面给出了我的Splashscreen 函数代码,它被一次又一次地调用

public void function showdialog() {
Toast.makeText(getBaseContext(), "Total Pending Notifications: " + pen_notifs, Toast.LENGTH_SHORT).show();
progressbar.setVisibility(View.VISIBLE);
}

提前致谢。

最佳答案

我查看了源代码,这是我的理论。

Toast 在内部使用 Service(通知服务)来排队并显示 Toast View 。 Service 在后台运行,其生命周期比任何 Activity 都长。

Notification Service 引用了您使用 makeText() 方法创建的 Toast View 。

并且 Toast View 有一个对 context 的隐式引用,它是您的 Activitycontext

因此,由于 Notification service 引用了您的 Toast View ,而 toast View 引用了您的 Activity,你的 Activity 根本没有被销毁。您的 Activity 正在泄漏。由于您的 Activity 尚未被销毁,因此即使在 onDestroy( ) 回调。

for 循环一直在运行,Notification service 隐含地持有对您的Activity 的引用。所以您的 Activity 不可能被销毁。

关于android - 为什么在我的 Activity 调用 ondestroy 之后,我仍然看到来自被销毁的同一个 Activity 的 Toasts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45654532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com