2012-01-22 52 views
5

我有一个android活动,它需要在自己的屏幕出现之前调用另一个活动(从用户那里获取密码)。我的代码目前通过从onResume()中调用startActivity()来完成此操作;它有点作品,但我一直在得到不一致的行为。任何人都可以告诉我这种方法是否合法(如果不是,我该怎么做)?我可以从onResume()内调用startActivity()吗?

谢谢,理查德。

+0

定义_inconsistent_行为? –

+0

当活动被破坏并在屏幕方向改变时重新创建时,就会出现怪异现象。从纵向到横向产生对两个活动方法(停止,恢复等)的调用的不同顺序,而在另一方面,调试器的顺序不同。我怀疑某种竞赛状况。我也刚刚注意到logcat抱怨来自system_process的'意外恢复'。 – user1163984

回答

5

调用startActivity()onResume()是绝对的罚款。我有很多这样做的活动,通常是对活动停止时发生的事件作出反应。

全部startActivity()确实是告诉Android在主线程变为可用时启动新的活动并将其添加到返回堆栈的顶部,在这种情况下,在Android完成调用所有必要的生命周期回调之后目前的活动。

如果您遇到奇怪的行为,我怀疑是与此有关。

0

你可以从onResume()调用startActivity(),但它是一个异步调用。因此onResume()(和当前活动的其他方法)将继续运行,直到Android操作系统接近startActivity()异步调用并开始新活动。

不一致您遇到的行为可能与您的活动持续无限期,直到操作系统加载新活动有关。

+0

'startActivity()'是异步的,但这意味着它是非阻塞的,不是阻塞,并且'onResume()'在调用后立即继续,它不会等待其他活动。 – Frxstrem

0

确实这是合法的,但取决于你想要做什么,它可能是不切实际的。通常的做法是从清单中定义的“第二”活动开始,然后交给第一个活动。另一种方式是开始一个活动,例如结果。 onCreate(),甚至可以在致电setContentView()之前完成。有很多种方法可以做到这一点,所以我想我们需要更多的信息来提供更准确的答案。

0

这听起来不是一个好主意。

一些替代方案:

  • 要索要密码,你可以使用一个对话框,而不是活动的。

  • 为什么不总是通过这个中间活动。在情况下,没有必要提示,而你连接到服务它可以显示别的东西,像一个动画密码(假设密码是网络的事情)

+0

密码解密活动显示的内容,所以我宁愿让密码可用_before_我显示数据。我没有关于活动顺序的任何选择,因为当屏幕方向发生变化时(我在活动被销毁时故意删除密码),会发生此问题。 – user1163984

+0

用户是否接受在他们打开设备时必须重新输入密码? –

+0

那么,在这种情况下,我是用户。但是,是的,我需要找到一种方法来阻止屏幕方向发生变化。 – user1163984

相关问题