问题标签 [activity-lifecycle]

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 回答
243 浏览

android - Android 立即销毁活动(调试标志),现实吗?

在我的 Android 模拟器上,我有“立即销毁活动”的标志。在这种情况下,我的应用程序不会做我想做的事,因为我的 MainActivity 总是必须在 ActivityStack 上。在我的应用程序运行时,ActivityStack 的 Activity 被破坏是真实的情况吗?

0 投票
3 回答
440 浏览

android - Android Activity 生命周期问题:何时提交 GlobalPreferences

我有一堆用户偏好,它们保存在我的应用程序的单例对象中。示例模型如下所示 -

所以现在,当用户浏览应用程序时,我创建了一堆活动,通过它们的生命周期,利用这些变量并完成。(例如,在onStart()方法中,我在呈现活动之前检查用户是否已登录)。

onPause()我的问题是,Android 文档似乎建议我在我的方法中备份任何与上下文相关的数据。但是onPause()每次我自己创建一个新活动时也会被调用,备份所有 GlobalVariables 似乎很浪费,只是在下一个活动的onStart()方法中恢复它们。有没有办法确定整个应用程序是否已经进入后台?如果没有,你什么时候真正保存你所有的 Globals?

谢谢,
泰加。

0 投票
2 回答
551 浏览

android - 活动的副作用不再可见?

我编写了一个简单的应用程序,通过文本转语音读取一页文本。它原则上有效,但现在我需要以对最终用户有意义的方式实现 onPause()、onResume() 等。

特别是关于 onPause() 我有两个选择:

  1. 暂停阅读,意图从左边继续阅读。
  2. 正常继续,好像活动仍然可见。

第二个选项看起来更明智,因为如果它不是视觉活动,为什么要让视觉障碍打断语音呢?

但是,我不确定在将 onPause() 实现为“什么都不做”功能时是否必须考虑其他系统范围的考虑因素(“副作用”)。

除了在活动不再可见时调用 onPause() 之外,在决定是否停止文本转语音时,是否还有其他事件或副作用需要考虑?

0 投票
1 回答
3114 浏览

android - 回调“Activity没有启动,它的当前任务已经被拉到最前面”?

我了解如果我的应用程序已经在运行并且我没有进行任何代码更改,LogCat 会显示以下警告:

ActivityManager: 警告: Activity 没有启动,它的当前任务已经被带到了前面

我不明白为什么没有像 onResume() 或 onRestart() 这样的活动生命周期被调用。

在我尝试重新运行之前,该应用程序是不可见的,那么为什么没有调用 onResume() 或 onRestart() 回调呢?

0 投票
3 回答
5555 浏览

android - 如何在 onResume() 方法中安全地完成一个 Activity?

我的活动的 onResume() 从启动它的 Intent 中读取一些“额外”数据并相应地更新 UI。

我想添加错误处理:如果 Intent 中的数据丢失/损坏,则活动显示 Toast 并完成。

我可以简单地在 onResume() 方法中调用 finish() 吗?考虑到两者都与生命周期有关,我担心一些意想不到的事情。

如果还有其他更好的方法,我也对这些感兴趣,但上面似乎最简单。

谢谢!

0 投票
1 回答
4772 浏览

android - Android Activity 生命周期:杀死后恢复应用程序 - 设计问题

atm 我试图让我的应用程序围绕“onSaveInstanceState”和“onRestoreInstanceState”工作,但我挖掘得越深,出现的问题就越多。

因此,例如,我刚刚意识到,通过这两个函数恢复一个活动是毫无用处的。因为,如果我按下后退按钮并返回到之前的活动,这个活动不会得到它的“savedInstanceState”包,而是完全重新创建。

有没有办法恢复整个应用程序而不仅仅是一个活动?或者这只是一个奇怪的设计,我什至不应该为恢复一项活动而烦恼?

亲切的问候,水母

编辑:好吧,愚蠢的我......

我的主要活动获得的捆绑包不是空的,而只是在“onRestore ...”中。在“onCreate”中它确实是空的,但这一直都是真的。(例如,无论我是否在杀死后从另一个活动中回来)

所以现在我以另一种方式感到困惑:我之前在另一个活动中对此进行了测试,并且在那里,“onCreate”和“OnRestoreInstanceState”的savedInstanceState包相同!这只是随机的还是主要活动的特殊情况?(也尝试了不同的启动模式,但没有任何影响)。

0 投票
3 回答
21105 浏览

android - onDestroy() 或 finish() 是否真的杀死了活动?

其实我知道我问的是Android的简单和基本概念。finish()但是我对这些和onDestroy()方法有点困惑。这是否会杀死活动并释放与这些活动相关的资源?

我尝试了一个只包含一个活动的简单应用程序。我认为这个概念就像当应用程序运行时,活动将启动。当我们单击后退按钮时,它将完成。我在每个生命周期方法中给出了一些 toast 消息,用于了解内存使用情况。当我单击后退按钮时,它执行onPause(),onStop()onDestroy(). 我以为这个活动结束了。但是当我再次重新启动应用程序时,它比上次占用了更多的内存。每次我从 Eclipse 运行应用程序或从主屏幕重新启动应用程序时都会发生这种情况。

为什么会这样?我如何才能真正销毁应用程序/活动以释放内存?


我包括我的代码。我只在课堂上给出一条祝酒词。然后内存使用量也在增加。

每次运行应用程序时,分配的大小都会增加,例如:3302744、3442384、3474552

显现:

为什么内存每次都在增加?

0 投票
2 回答
27574 浏览

android - 如果不能保证调用 onDestroy(),为什么要实现它?

根据 android Activity 生命周期,唯一保证被调用的回调(如果活动离开运行状态,这通常是预期的)是onPause().

因此,我必须假设在某些情况下实现它是有意义的onStop()onDestroy()尽管它们并不能真正保证被调用。

我知道onStop()当一个活动有可能通过 Stopped 状态返回到 Running 状态时应该实施(为什么它会这样做而不是直接返回是另一个问题)。

但是onDestroy(),当我可以将所有清理/状态保存放入onPause()时,我不清楚对 的需求。

你能描述一个真正的应用情况(即不类比驾驶汽车等),在这种情况下实现它是有意义的onDestroy()吗?

0 投票
0 回答
545 浏览

java - Android:TabHost Activity 在 kill / OnSaveInstanceState 未调用后表现怪异

我不确定我是不是做错了什么,但是当我偶然发现一个类似的错误时,它也可能是另一个错误。我想知道您是否可以确认这一点,甚至知道解决方案?

好的,所以我有一个包含两个活动 A 和 B 的选项卡主机。

A 是“第一个”选项卡。因此,如果我执行以下操作:

  • (A打开)
  • 开关 B
  • 关闭应用
  • 杀死进程
  • 再次打开应用
  • (B出现)

然后我一切都很好。使用 Log 我看到 A 和 B 都调用了“onRestoreInstanceState”。

现在,我执行以下操作:

  • (B已打开,我还没有切换回A)
  • 开关 B
  • 关闭应用
  • 杀死进程
  • 再次打开应用
  • (B出现)

然后为 B 调用“onRestoreInstanceState”,但不为 A 调用。A 在“onCreate”中是一个空包。

如果我切换到 A,然后再回到 B,就可以了。之后,我可以重复上述行为。

我知道这听起来有点令人困惑,但是以前有人遇到过吗?

亲切的问候,水母

编辑:

我已经为另一个选项卡重复了此操作(保持 A 打开,终止活动,恢复它,再次终止它,再次恢复它)。然后,直到我故意切换选项卡才调用B的“onCreate”;并且无论之前是否恢复,它总是获得 SavedInstance Bundle。所以一切都很好。

编辑2:

除了例外,旋转变化也是如此。以前真的没有人注意到这一点吗?在 2.2 模拟器和 2.3 手机上都可以使用。

0 投票
3 回答
1343 浏览

android - Android活动标志问题

我将启动器活动标志设置为 singleTop。

当我从通知栏启动活动时(在接收器中使用 FLAG_ACTIVITY_NEW_TASK),会创建新活动并且不使用前一个活动。怎么做才能使堆栈中只有一个活动?

编辑:

在接收器中,似乎正在工作