android活动生命周期的困境

android活动生命周期的困境,android,android-activity,android-lifecycle,Android,Android Activity,Android Lifecycle,我有一个应用程序,我正在HTC one X上测试 简要说明: 我的主要活动是一个选项卡式应用程序(使用片段)。在其中一个选项卡中,我有一个按钮,可通过将用户带到另一个活动 Intent myIntent = new Intent(view.getContext(), NoteActivity.class); startActivity(myIntent); 这一切都很好。但是在NoteActivity中,我有一个文本字段,如果屏幕锁定打开,NoteActivity会立即被销毁,当用户解锁时,我

我有一个应用程序,我正在HTC one X上测试

简要说明:

我的主要活动是一个选项卡式应用程序(使用片段)。在其中一个选项卡中,我有一个按钮,可通过将用户带到另一个活动

Intent myIntent = new Intent(view.getContext(), NoteActivity.class);
startActivity(myIntent);
这一切都很好。但是在NoteActivity中,我有一个文本字段,如果屏幕锁定打开,NoteActivity会立即被销毁,当用户解锁时,我的“主”活动会立即启动

此外,当我从mainactivity->noteactivity移动时,我的mainactivity永远不会被销毁,但当我返回时(当用户处理完便笺并单击“保存”时),noteactivity总是立即被销毁

显然,我需要将文本字段内容存储在ondestroy中,并将其重新插入oncreate中,但我不明白为什么当屏幕锁激活时,我的第二个活动总是被破坏?我的主要活动从未被破坏


我有点不确定为什么Android会做出这些生命周期决策。如果有人有任何意见,我很想听听。

在许多平台/语言中,开发人员负责管理内存。这会导致许多错误和性能问题。Android的设计者基本上已经将这一责任从开发者手中转移到了操作系统中。Android可以在您的任何活动不在前台的任何时候销毁它们,因此在您的活动进入后台之前调用onPause()的规定

为什么Android会破坏你的活动是非决定性的,取决于其他因素;设备有多少内存;有多少内存是空闲的;正在运行的其他应用程序和服务;使用什么内核调控器和节能策略等等,来确定这一决定因素将是一项庞大而复杂的任务,因此设计简单地说,一旦你的活动进入后台,Android可能会破坏它,有时不会再回调给你,所以你应该使用生命周期来根据需要保存和恢复状态

一旦你习惯了它,它实际上是很有意义的,并且很容易使用。我来自Windows背景,适应它需要一些时间,但现在我知道了,这很好。我不会说是好是坏,但这是一个很好的移动设备解决方案

正是对桌面操作系统的习惯性思考促使我开始寻找任务管理器,并在应用程序中执行类似system.exit()的操作,但是,让Android自行管理,它的性能会更好


生活在生命周期中。

Simon,非常感谢您的回复。我认为我非常精通活动生命周期的概念。我的问题是,为什么一项活动似乎比另一项“更有价值”。在我看来,我描述的场景导致“堆栈”功能(最新的活动位于顶部,后退按钮返回到上一个活动)并不像广告中所说的那样发挥作用,因为我可以看到,对于我的应用程序来说,NoteActivity(即当前的NoteActivity)总是会被破坏,因此在重新激活屏幕后,我的主应用程序的onCreate()-总是被调用。而且,更有趣的是,这只发生在HTC One X上,而不是在我的任何其他Android测试手机上。对不起,我不是故意光顾的。我从你的行动中推测你对此感到不舒服。A.如果正在调用主应用程序onCreate(),则说明您的应用程序已被销毁,而不是活动。B为什么是一个X-请参见上面的影响因素列表。C为什么是一个活动而不是另一个-资源使用?Dalvik对应用程序的资源使用情况进行了分析,这样Android就可以决定哪些是“高优先级”的东西,一旦它们离开前台就可以杀死它们。当然,我在描述中搞砸了:)我的意思是“第一个”活动的onResume被调用,而不是create。基本上,我的“launcher”活动永远不会被销毁,但是我从Main活动中启动的noteactivity每次都会被onDestroy()删除,当屏幕锁打开时就会立即删除。我觉得这很奇怪,尤其是因为它只发生在一个X上。干杯,伙计