如何使用onResume()函数?

95

有人能给我一个在Android中使用onResume()的例子吗?

另外,如果我想在另一个活动完成执行时重新启动该活动,应该执行哪个方法--onCreate()还是onResume()

如果我想更新数据,如何将其放入onResume()中?


onResume() 方法在从通话或其他操作返回到活动时调用。您可以像 onCreate() 一样覆盖 onResume 方法并执行任务。 - Jibran Khan
这个链接可能会帮助您更好地了解 Android 应用的生命周期。 - TronicZomB
2
这些方法被调用的顺序在Android开发者文档中有解释:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle - Michael
1
欢迎来到SO。 - donfede
9个回答

149

任何重新启动的活动都会首先执行其onResume()方法。

要使用此方法,请按照以下步骤进行操作:

@Override
public void onResume(){
    super.onResume();
    // put your code here...

}

87

1
使用超链接提供链接。 - Manoj Fegde
链接有时候会出问题,我不知道为什么。 - Viswanath Lekshmanan
2
我不建议手动调用Activity生命周期中的任何方法,这可能会导致很多问题。 - Cata
1
@Cata,我认为Viswanath的意思是这些方法将被调用,我已经相应地更新了答案。 - Mathieu K.
1
我想指出现在onResume在onCreate之前被调用了! - user10699646

29
理解这个问题最好的方法是在您的活动中覆盖所有LifeCycle方法,并在每个方法中放置一个断点(如果在模拟器中进行检查)或日志记录。您将知道何时调用每个方法。
简单来说,onCreate()首先被调用,然后如果通过转到主屏幕或启动另一个活动暂停了活动,则会调用onPause()。如果操作系统在此期间销毁了该活动,则会调用onDestroy()。如果您恢复应用程序并且已经销毁了应用程序,则将调用onCreate(),否则将调用onResume()
修改:我忘记了onStop(),它在onDestroy()之前被调用。
按照我提到的练习做,您就能更好地理解。

2
我已经寻找这样详细的解释有一段时间了,这确实帮助我创建了完美的应用程序活动周期。谢谢。 - Keno
你忘记了onStart()。 - Dory Daniel

12
打开应用时,它将经历以下状态: onCreate() -> onStart() -> onResume()
当你按下返回按钮并退出应用程序时: onPaused() -> onStop() -> onDestory()
当你按下主页按钮时: onPaused() -> onStop()
在按下主页按钮后,再次从最近任务列表中打开应用程序时: onRestart() -> onStart() -> onResume()
在关闭对话框或对话框的返回按钮后: onResume()
如果手机正在响铃并且用户正在使用应用程序: onPause() -> onResume()
通话结束后: onResume()
当您的手机屏幕关闭时: onPaused() -> onStop()
当您的手机屏幕重新打开时: onRestart() -> onStart() -> onResume()
愉快编码...@Ambilpura

1
当您按下最小化按钮时,onPaused()函数会被调用。 - Marfin. F

9
大多数之前的回答都很好地解释了何时、为什么以及如何使用onResume(),但我想补充一些关于重新创建Activity的内容。

我想知道如果我想在另一个操作执行结束时重新启动活动,那么会执行onCreate()还是onResume()方法?

答案是onCreate()。然而,在决定是否要重新创建它时,你应该问自己需要重新创建多少Activity。如果是适配器中的数据(例如列表),则可以在适配器上调用notifyDataChanged()来重新填充适配器,而不必重绘所有内容。
此外,如果只需更新某些views而不是所有views,则可能更有效地在需要更新的view上调用invalidate()。这将仅重新绘制那些views,可能使您的应用程序运行更流畅。希望这能帮到您。

6

onResume()是在activity生命周期中调用的方法之一。当activity被隐藏,例如启动一个新的activity隐藏它时,onResume()就是相应的方法onPause()的对应方法。当隐藏的activity重新显示在屏幕上时,onResume()将被调用。

你的问题询问的是重新启动activity所使用的方法。当activity首次创建时,onCreate()被调用。实际上,大多数activity通过一系列onPause()onResume()调用保留在后台。只有通过调用onStop()将activity完全停止并重新启动时,才会真正地“重新启动”activity,此时onRestart()被调用。因此,如果您没有使用onStop()来停止activity,那么您很可能会使用onResume()

阅读上面链接中的android文档,以更好地了解不同生命周期方法之间的关系。无论您最终使用哪种生命周期方法,通用格式都是相同的。您必须覆盖标准方法并在注释部分中包含您的代码,即在该点上您希望activity执行的操作。

@Override
public void onResume(){
 //will be executed onResume
}

当我们在视图中点击一个项目时,onResume()方法会被调用吗? - natcomp256
1
点击一个项目并不一定会调用 onResume 方法。只有当该视图被隐藏和恢复或在完全创建之前的初始加载时,才会调用 onResume 方法。 - Rarw
显示错误没有调用到super.onResume()。 - sirmagid

5

KOTLIN

任何需要重新启动的活动都会首先执行其onResume()方法。

若要使用此方法,请按以下步骤操作:

override fun onResume() {
        super.onResume()
        // your code here
    }

3

1
在活动启动、重新启动(onRestart() 在 onStart() 之前发生)或暂停(onPause())后,会调用 onResume()。当活动处于 onResume() 状态时,该活动已经准备好供应用程序用户使用。
我稍微研究了一下活动的生命周期,以下是我对此主题的理解:如果你想在另一个活动执行结束时重新启动活动(A),可能会有几种不同的情况。
  1. 另一个活动(B)已暂停、停止或销毁,而活动A可能已被暂停(onPause()),在这种情况下,活动A将调用onResume()

  2. 活动B已暂停、停止或销毁,活动A可能由于内存问题已停止(onStop()),在这种情况下,活动A将首先调用onRestart(),然后是onStart(),最后是onResume()

  3. 活动B已暂停、停止或销毁,活动A已被销毁,程序员可以手动调用onStart()来首先启动活动,然后是onResume(),因为当一个活动处于销毁状态时,活动尚未启动,并且这发生在活动被完全删除之前。如果活动被删除,需要重新创建活动。我认为手动调用onStart()是因为如果活动未启动并且已创建,onStart()将在onCreate()之后调用。

如果要更新数据,请创建数据更新函数并将其放置在onResume()中。或者在onResume()中放置一个loadData函数。

最好使用Activity生命周期图来理解生命周期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接