Android 我可以从onResume()中调用startActivity()吗?

Android 我可以从onResume()中调用startActivity()吗?,android,android-activity,Android,Android Activity,我有一个android活动,它需要调用另一个活动(从用户那里获取密码),然后才会显示自己的屏幕。我的代码目前通过在onResume()中调用startActivity()来实现这一点;这有点奏效,但我的行为一直不一致。有人能告诉我这种方法是否合法(如果不合法,我应该怎么做) 谢谢,Richard。您可以从onResume()调用startActivity(),但这是一个异步调用。因此,onResume()(以及当前活动的其他方法)将一直运行,直到Android操作系统开始执行startActiv

我有一个android活动,它需要调用另一个活动(从用户那里获取密码),然后才会显示自己的屏幕。我的代码目前通过在onResume()中调用startActivity()来实现这一点;这有点奏效,但我的行为一直不一致。有人能告诉我这种方法是否合法(如果不合法,我应该怎么做)

谢谢,Richard。

您可以从onResume()调用startActivity(),但这是一个异步调用。因此,onResume()(以及当前活动的其他方法)将一直运行,直到Android操作系统开始执行startActivity()异步调用并启动新活动


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

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

这听起来不是个好主意

一些备选方案:

  • 要询问密码,可以使用对话框而不是活动

  • 为什么不总是通过这个中间活动呢。如果不需要提示输入密码,则可以在连接到服务时显示其他内容,如动画(假设密码是网络内容)


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

startActivity()
所做的就是告诉Android启动新活动,并在主线程可用时将其添加到后堆栈的顶部,在本例中,这将在Android完成对当前活动调用所有必要的生命周期回调后进行


如果您遇到异常行为,我怀疑这与此有关。

定义不一致行为?当活动被破坏并在屏幕方向改变时重新创建时,就会出现异常。从纵向到横向,对这两个活动的方法(stop、resume等)的调用顺序与另一种不同,调试器下的调用顺序也不同;我怀疑某种种族状况。我还注意到logcat抱怨system_进程“恢复时意外恢复”。
startActivity()
是异步的,但这意味着它是非阻塞的,而不是阻塞的,
onResume()
在调用后立即继续,它不会等待其他活动。密码会解密活动显示的内容,因此我希望在显示数据之前使用密码。关于活动顺序,我没有任何选择,因为当屏幕方向改变时会出现这个问题(当活动被破坏时,我故意删除密码)。用户是否接受在每次打开设备时都必须重新输入密码?在这种情况下,我就是用户。但是,是的,我确实需要找到一种方法来阻止屏幕方向改变时发生这种情况。有一些方法可以防止活动重新启动。cfr