一.什么是Activity
Activity是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。一个应用通常由多个彼此松散联系的 Activity 组成。
一般会指定应用中的某个 Activity 为“主” Activity,即首次启动应用时呈现给用户的那个 Activity。而且每个 Activity 均可启动另一个 Activity,以便执行不同的操作。每次新 Activity 启动时,前一 Activity 便会停止,但系统会在堆栈(“返回栈”)中保留该 Activity。当新Activity 启动时,系统会将其推送到返回栈上,并取得用户焦点。返回栈遵循“后进先出”堆栈机制,因此,当用户完成当前 Activity 并按“返回”按钮时,系统会从堆栈中将其弹出(并销毁),然后恢复前一 Activity。当一个 Activity 因某个新 Activity 启动而停止时,系统会通过该 Activity 的生命周期回调方法通知其这一状态变化。Activity 因状态变化—系统是创建Activity、停止 Activity、恢复Activity 还是销毁 Activity— 而收到的回调方法可能有若干种,每一种回调方法都会为您提供执行与该状态变化相应的特定操作的机会。例如,停止时,您的 Activity 应释放任何大型对象,例如网络或数据库连接。当 Activity 恢复时,您可以重新获取所需资源,并恢复执行中断的操作。这些状态转变都是 Activity 生命周期的一部分。(来自android developer API)
二.Activity生命周期(重点)
onCreate
onStart()
onResume()
onPause()
onStop()
onDestroy()
一表解决所有方法调用时机:
方法 | 描述 | 是否能事后终止? | 后接 | ||
onCreate() | 首次创建 Activity 时调用。 您应该在此方法中执行所有正常的静态设置— 创建视图、将数据绑定到列表等等。系统向此方法传递一个 Bundle 对象,其中包含 Activity 的上一状态,不过前提是捕获了该状态(请参阅后文的保存 Activity状态)。 始终后接 onStart()。 | 否 | onStart() | ||
| onRestart() | 在 Activity 已停止并即将再次启动前调用。 始终后接 onStart() | 否 | onStart() | |
onStart() | 在 Activity 即将对用户可见之前调用。 如果 Activity 转入前台,则后接 onResume(),如果 Activity 转入隐藏状态,则后接 onStop()。 | 否 | onResume() | ||
| onResume() | 在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。 始终后接 onPause()。 | 否 | onPause() | |
onPause() | 当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。 如果 Activity 返回前台,则后接 onResume(),如果 Activity 转入对用户不可见状态,则后接 onStop()。 | 是 | onResume() | ||
onStop() | Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。 如果 Activity 恢复与用户的交互,则后接 onRestart(),如果 Activity 被销毁,则后接 onDestroy()。 | 是 | onRestart() | ||
onDestroy() | 在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人调用 Activity 上的finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 您可以通过isFinishing() 方法区分这两种情形。 | 是 | 无 |
常见情况Activity调用:
当用户点击当前Activity进入下一个Activity时,当前Activity调用onPause(),onStop()但不会调用onDestroy();
当用户按下返回键销毁当前Acitity返回上个Activity不会调用onCreat()而是直接调用onRestart ,onStart(),onResume().
当用户在当前情况按下home键,依次调用onPause(),onStop(),打开app依次调用onRestart ,onStart(),onResume().
三.Activity跳转
Activity跳转,无返回结果
这是最简单的Activity跳转方式。从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activity.this, 下一Activity.class))。
Activity跳转,返回数据/结果
需要返回数据或结果的,则使用startActivityForResult (Intent intent, int requestCode),requestCode 的值是自定义的,用于识 别跳转的目标Activity。跳转的目标Activity所要做的就是返回数据/结果,setResult(int resultCode)只返回结果不带数据,或者setResult(intresultCode, Intent data)两者都返回!而接收返回的数据/结果的处理函数是onActivityResult(int requestCode, int resultCode, Intent data),这里的requestCode就是startActivityForResult的requestCode,resultCode就是 setResult里面的resultCode,返回的数据在data里面。
** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。