Android OnCuto在OnStand之后没有OnDebug在中间调用
将在OnStter之后调用OnCube,而不是OnDebug在中间? 从下图来看,答案是肯定的 但在这本书中,它说: 受保护的顶部无效()Android OnCuto在OnStand之后没有OnDebug在中间调用,android,multithreading,Android,Multithreading,将在OnStter之后调用OnCube,而不是OnDebug在中间? 从下图来看,答案是肯定的 但在这本书中,它说: 受保护的顶部无效() 当用户不再可以看到您时调用 用户。接下来,您将收到onRestart()、onDestroy()或 无,取决于以后的用户活动 即使用户转到其他应用程序或关闭屏幕,我的应用程序也需要运行后台任务。任务应该停止的唯一情况是应用程序完全关闭。因此,我在onCreate()中创建并运行后台线程,并在onDestroy()中停止它。我面临的问题是,有时我的多个线程同
当用户不再可以看到您时调用 用户。接下来,您将收到onRestart()、onDestroy()或 无,取决于以后的用户活动 即使用户转到其他应用程序或关闭屏幕,我的应用程序也需要运行后台任务。任务应该停止的唯一情况是应用程序完全关闭。因此,我在
onCreate()
中创建并运行后台线程,并在onDestroy()中停止它。我面临的问题是,有时我的多个线程同时运行。当我离开我的应用程序很长一段时间后又回来时,这种情况经常发生。我认为这可能是由于多次调用onCreate()
造成的。如何解决
当我离开我的应用程序很长一段时间后又回来时,这种情况经常发生。我认为这可能是由于多次调用onCreate()。如何解决
在onCreate()
中,您可以检查后台线程是否正在运行,如果是,则不要再次启动
更重要的是,您的后台线程是服务
还是异步任务
还是仅仅是简单的线程
考虑到您问题中的措辞,如果您尚未使用服务,我建议您选择。它不会产生“多线程”问题。请使用服务运行后台任务。如果要在当前活动销毁时停止服务,可以使用绑定服务。
请发布您的代码片段以获得确切的想法,您是如何尝试的。我们可以提供更多帮助
将在OnStter之后调用OnCube,而不是OnDebug在中间?
简短回答:否
长答覆:
如果在活动
上仅调用了onStop
,则不会调用onCreate
。在onStop
之后,如果用户导航回活动,则将调用onStart
(在此之前也将调用onRestart
)
现在让我解释一下在onStop
之后如何调用onCreate
,而不调用onDestroy
为此,您需要查看android中的流程优先级层次结构:
自调用onResume
但尚未调用onPause
时起,活动仍在前台进程中。而且,由于前台进程具有最高优先级,所以它不会被杀死
onPause
在用户不再能够与活动进行交互,但该活动可见时调用。示例:打开活动上方的对话框片段时。然后活动流程进入可见流程。此进程的优先级低于前台进程,但具有足够的优先级,不会被杀死
之后不会出现onStop
,当用户不再能够看到活动时调用,这意味着活动不可见。
当活动流程移到后台流程中时,就会出现这种情况。现在,如果系统需要更多内存,并且您的活动消耗的内存比其他活动多,则可以将其杀死(这与本答案的主题无关,即哪个背景首先被杀死)
因此,如果某个活动位于后台并被系统终止,则不能保证调用onDestroy
。在这种情况下,onCreate
将在onStop
之后调用,而不调用onDestroy
这就是为什么在问题图像(活动生命周期)中显示,如果应用程序进程被终止,onCreate
将在onStop
之后调用
编辑1:
如果您想在销毁活动之前处理任何事情(如释放内存、杀死内存密集型任务等),并且由于onDestroy
不能保证被调用,您可以实现(仅对于api级别>=14)接收应用程序/活动不同阶段的回调。不同的阶段和他们的解释是不同的
如果您想在API级别<14中实现相同的功能,可以使用回调,它大致相当于。您的回答很有帮助。onDestroy()不保证被调用。奇怪的是没有onkill()方法,所以不可能处理所有活动死亡事件。我现在正在学习如何使用服务来解决我的问题。@JeffreyChen,是的,有一些方法可以获得这些回调,我已经更新了答案,只需检查一下它。handler.postDelayed([Runneable及其run()包含这一行],一些句号)。因此,它会定期运行,直到布尔标志设置为true。如果我在服务中启动任务,然后终止并重新创建服务,该怎么办。它似乎也产生了“多线程”问题。@JeffreyChen如果服务正在运行,它将不会再次运行。如果该服务被终止,并且您的程序再次启动它,那么它仍然只运行该服务的一个实例。但是在我的例子中,该服务每次重新创建时都会生成一个工作线程。难道不可能同时运行多个工作线程吗?