【发布时间】:2021-09-14 20:37:06
【问题描述】:
(抱歉介绍太冗长了。)
我的程序中有一个“错误”,它会随机进入不应该执行的活动。例如,假设我有活动 A(MainActivity)、B 和 C。我从 A 移动到 B,然后从 B 移动到 C。然而,在从 B 移动到 C 时,我注意到它从 B 到 A 然后 A 到C(这对我来说毫无意义;为什么它甚至不“回到”B?)。我无法找出原因,因为我没有任何代码可以从 B 转到 A。
这是日志:
A onCreate (from: None) // 刚刚启动程序
一个开始
一份简历
单击活动 A 中的按钮以移动到 B
暂停
B onCreate(来自:A)
B onStart
B onResume
上车
一个 onDestroy
单击活动 B 中的按钮以移动到 C
暂停
A onCreate (from: B) // 为什么?
C onCreate(来自:B)
一个开始
开机
一份简历
C onResume
B onStop
B onDestroy
虽然我相信我不会“同时”进行两项活动,但我认为我是因为 A 被调用。为了验证这一点并看看如果我“同时”移动到两个不同的活动会发生什么,我制作了一个简单的程序,从 B 和 C strong>一个像这样:
startActivity(new Intent(this, B.class));
startActivity(new Intent(this, C.class));
一旦我按下 A 中的一个按钮,这两个就会被调用。我已经为每个活动覆盖了onCreate()、onStart()、onResume()、onPause()、onRestart() 和onRestart() 和onDestroy(),以放置print 语句以查看它们中的每一个何时被调用。这是我在 Activity B 中按下按钮后的结果(移动到 Acitivity C)。
一个 onCreate
一个开始
一份简历
暂停
点击创建
开机
C onResume
上车
我不明白为什么不调用 B(甚至不调用 onCreate())。是不是因为它立即执行以下命令,甚至没有“足够的时间”来为 B 调用onCreate()?我一直在关注 this 和 this(以及 SO 网站)一段时间,但我认为我不理解这种行为。
B 没有被调用有什么原因吗?此外,它从 B 移动到活动 A 然后从 B 移动到 C 的原因可能是什么(提到在“介绍”中)?
编辑:为了清楚起见,我并不想同时运行两个活动。事实上,当我试图转移到活动 C 时,活动 A 无缘无故地被调用(来自“介绍”)。我在想这可能是因为 Activity A 没有被销毁(仍在堆栈上),但我不确定问题是什么。
编辑 2:我试图通过创建一个新程序来提出一个可重现的最小示例,但似乎我没有遇到这种行为,可能是因为我从 DB 中删除了获取数据(也许是因为这个?)。我在下面的 cmets 中简要解释了我在做什么。
【问题讨论】:
-
这能回答你的问题吗? Switching between activities in android?
-
@SonuSanjeev 正如我在问题中提到的,这是为了看看当我“同时”调用两个活动时它会如何表现。这不是我想要做的。这样做是为了解决我程序中的“错误”。
-
@HenryTwist 这似乎是有道理的,虽然不应该也安排 Activity B (并且 Activity C 安排在 B 之后,这意味着 B 应该在某个时候被调用,因为它在堆栈上)?
-
@AjithkumarMuthukumaran 关于第一个链接,我不想运行
Service或AsyncTask。如果您看到我的“介绍”,您会发现它无缘无故地转到了活动 A(我什至没有从 B 移动到 A 的代码,当然,我没有按后退按钮)。如我的问题所述,第二个链接是我已经查看了一段时间的链接。 -
@Droid 我对它的内部运作一无所知,但 B 开始也没有多大意义。如果在 A 完成之前启动了另一个活动 (C),那么只显示 C 是合乎逻辑的。如果一次只显示一个活动,就没有理由维护一个“堆栈”活动。
标签: android android-intent android-activity android-lifecycle