四大组件之一的Activity组件,在应用中一个Activity能够用来表示一个界面,中文意思也能够理解为“活动”,即一个活动开始,表明Activity组件启动,活动结束,表明一个Activity的生命周期结束。一个android应用必须经过Activity来运行和启动,Activity的生命周期交给系通通一管理。前端
有时间的童鞋还能够去理解如下四个基本概念,将有助于咱们更好的了解Android系统内部机制:
java
Application、Activity、Activity栈、Taskandroid
三大基本状态:app
Resumed:一个新Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
ide
Paused:当Activity被另外一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持链接,系统继续维护其内部状态,因此它仍然可见,但它已经失去了焦健,因此不可与用户交互。布局
Stoped:当Activity被另一个Activity覆盖、失去焦点并不可见时处于的状态。 测试
Activiy的生命周期:spa
onCreate(Bundle savedInstanceState);code
onStart();orm
onRestart();
onResume();
onPause();
onStop();
onDestroy();
Activity实际上是继承了ApplicationContext这个类,咱们能够重写如下方法,以下代码:
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
为了便于理解,咱们能够写一个Demo,经过必定的操做来观察Activity在生命周期中状态的变化状况。
第一步:新建一个Android工程,我这里命名为ActivityDemo.
第二步:修改ActivityDemo.java(我这里从新写了以上的七种方法,主要用Log打印),代码以下:
package com.example.activityins; import android.app.Activity; import android.os.Bundle; /** * Activity的三大状态和七大生命周期方法分析 */ public class MainActivity extends Activity { /** * Activity建立时第一个调用的方法,一般咱们再该方法中加载布局文件,初始化UI组件,事件注册等等 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("MainActivity-onCreate"); } /** * 再onCreate方法以后调用,用于显示界面,但当前用户还不能进行交互 */ @Override protected void onStart() { super.onStart(); System.out.println("MainActivity-onStart"); } /** * 当activity从stopped状态下被返回时调用,以后再调用onResume方法进入resumed状态 */ @Override protected void onRestart() { super.onRestart(); System.out.println("MainActivity-onRestart"); } /** * 在onStart方法后调用,执行完了该方法后,用户可进行交互,当前Activity进入resumed状态 * 当activity从Paused状态被从新返回时,会再次调用该方法,让Activity进入resumed状态 */ @Override protected void onResume() { super.onResume(); System.out.println("MainActivity-onResume"); } /** * 当其余Activity(透明或窗口模式)进入时,调用该方法,让当前Activity进入paused状态 * 当前Activity依然是可见状态,但不可交互。若是其余更高优先级的APP须要内存时,当前Activity可能会被销毁 * 当前Activity被返回时调用onResume方法 */ @Override protected void onPause() { super.onPause(); System.out.println("MainActivity-onPause"); } /** * 当其余Activity彻底覆盖该Activity时,调用该方法,当前Activity进入stopped状态 * 当前Activity是不可见状态。若是其余更高优先级的APP须要内存时,当前Activity可能会被销毁 * 当前Activity被返回时调用onRestart方法 */ @Override protected void onStop() { super.onStop(); System.out.println("MainActivity-onStop"); } /** * 当前activity被销毁时调用,一般在该方法中用来释放资源,当前activity被kill掉 */ @Override protected void onDestroy() { super.onDestroy(); System.out.println("MainActivity-onDestroy"); } }
接下来就是测试了,咱们一边操做一边观察LogCat中的打印:
第一步:启动项目
在这一步骤中,Activity前后执行了onCreate()->onStart()->onResume()三个方法。
第二步:点击HOME键回到桌面
执行了onPause()->onStop()两个方法,这个时候,activity依然存在,只是咱们看不到了,但并无被销毁。
第三步:再次点击应用图标回到程序中,恢复页面
执行了onRestart()->onStart()->onResume()三个方法
第四步:点击BACK键退出程序
执行了onPause()->onStop()->onDestroy()三个方法,这个时候,程序被销毁。
第五步:在启动程序(也就是第一步)后,咱们点击电源键锁屏
第六步:点击电源键点亮屏幕,并解锁
还有其余的状况,好比,在第一步后面,从任务切换的地方进入另外一个应用程序,而后再回到咱们的测试程序中,等等。
这些你们能够本身下来试一试。
如今,咱们再回到上面去看Activity生命周期图,相信你们都能很容易的理解这张图了。