首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当MainActivity被Back-Button销毁,然后重新创建时,静态变量和服务到底会发生什么呢?

当MainActivity被Back-Button销毁,然后重新创建时,静态变量和服务到底会发生什么呢?
EN

Stack Overflow用户
提问于 2017-08-17 14:56:40
回答 2查看 148关注 0票数 1

我想更好地理解当按下后退按钮和MainActivity被销毁的静态变量和注册服务时到底发生了什么。

这是我已经知道的:

  • 将调用onDestroy()。
  • 当您单击“概述”按钮时,仍会列出该活动(与单击“家庭”按钮或切换到另一个活动时相同)。当您再次激活它时,将调用onCreate()。

我需要知道的是:

1.)声明和全局初始化的静态变量会发生什么。

静态布尔logging_on_flag = false;

当应用程序运行时,这会变成真,但是如果该活动被后退按钮取消,然后重新创建,它是真还是假?

2.)注册服务(侦听器)会发生什么?

也就是说,我使用来记录我的位置数据。在注册位置侦听器之后,每次位置更改时,系统都会调用方法onLocationChanged()。用这种方法,我做日志记录。当我离开应用程序的后退按钮,这个过程会被打断吗?听众会被取消登记吗?

我很困惑,不得不问这里的专家,因为我的应用程序的后退-按钮行为发生了变化,因为我开始处理碎片。

在此之前:

将应用程序与back按钮放在一起不会中断日志记录过程,但是当再次选择活动时,非静态变量将被恢复。由于侦听器绑定到旧的变量实例,因此更改新实例不再对日志记录过程产生任何影响。此外,侦听器将再次注册,因为这发生在onCreate()中,这会导致双重日志记录(每次测量都记录两次)。

我可以通过使logging_flag静态(这防止了实例化)并签入onCreate()来解决这个问题,如果标志已经是真的,如果是这样的话,侦听器就不会再次注册。这就像一种魅力,因为在重新创造之后,国旗仍然是真的。

在这里和那里实现片段之后:

按后退按钮离开应用程序的行为似乎已经完全改变了。现在,当按下“后退”按钮时,日志记录立即停止,当您回到应用程序时,它将被完全重新启动,甚至静态变量也不再为真而是为false。

有谁能解释一下,为什么行为在静态变量和服务方面发生了变化?

请注意,这是一个一般的问题,以获得一个更好的了解后退按钮。我没有要求一个解决方案(是的,我知道我应该更好地使用savedInstanceState)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-17 15:11:31

静力学不是对象的一部分,所以它们仍然存在,直到您将null赋值给它们。或者杀死应用程序。

回答你的问题: 1)静态意志包含最后的值,2)侦听器将工作,直到你杀死应用程序。必须在“关闭”时注销侦听器。

为什么要改变行为?它并没有改变。我想你犯了什么错误,但你看不见代码就说不出来。

票数 1
EN

Stack Overflow用户

发布于 2017-08-17 15:31:47

静态变量会发生什么,这些变量是全局声明和初始化的。

只要你的应用程序还在运行,他们就会活下去。当您回到系统的主屏幕时,应用程序进程是不必要的(如果系统认为它有足够的资源,它将自动管理)。因此,在下次启动应用程序时,您的静态变量可能仍然有您设置的值。

注册服务(侦听器)会发生什么?

根据您启动服务的方式,即使您不需要它,它仍然可以在后台中运行!。所以,当应用程序停止时,不要忘记停止一切。

关于侦听器,它们仍然会受到服务的影响,这样如果您忘记不注册它们,它就会产生内存泄漏。

结论

您应该避免使用静态变量来存储数据(可以使用最终静态作为常量)。

您应该使用onPause来停止服务/注销侦听器.和onResume重新启动它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45738549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档