Activity的生命周期详解

来源:互联网 发布:如何在淘宝里开网店 编辑:程序博客网 时间:2024/05/16 05:04

         在Android的学习当中,activity可能是我们最先接触到的,简单的说它就是一个我们能看到的界面,是Context的子类,实现了Window.CallBack和KeyEvent.CallBack,能够和用户进行交互,所以Activity非常重要,下面对它的声明周期进行讲解:

先来看看官方文档吧:


  从上图中,可以看出activity有如下几个声明周期:onCreate()、onStart() 、onResume()、 onPause() 、onStop() 、onDestory()与 onRestart()这个7个声明周期方法。

Android的应用程序的生命周期是被统一掌控的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并适应它。简单地说一下为什么是这样:我们手机在运行,一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源 ,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。
言归正传,Activity的基本生命周期如下代码 所示:

public class AActivity extends AppCompatActivity {    private static String TAG="AActivity---";        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        System.out.println(TAG+"onCreate");    }    @Override    protected void onRestart() {        super.onRestart();        System.out.println(TAG+"onRestart");    }    @Override    protected void onStart() {        super.onStart();        System.out.println(TAG+"onStart");    }    @Override    protected void onResume() {        super.onResume();        System.out.println(TAG+"onResume");    }    @Override    protected void onPause() {        super.onPause();        System.out.println(TAG+"onPause");    }    @Override    protected void onStop() {        super.onStop();        System.out.println(TAG+"onStop");    }    @Override    protected void onDestroy() {        super.onDestroy();        System.out.println(TAG+"onDestroy");    }}

运行输出如下:


可知,Activity创建的时候,声明周期的调用顺序是:onCreate()、onStart()、onResume()  ,

在onCreate()方法,创建界面,经常做数据的初始化操作。

在onStart()方法,此时用户便可以看见界面了,注意此时是不能响应触摸事件的。

执行onResume()方法后,便获取了焦点,可以响应用户的触摸事件,另外在Android的LanuchpadActivity源代码的onResume()方法中,可以看到广播接收者的注册在这个方法中,所以当需要注册广播接收者推荐在这个方法中注册。
下面点击手机返回键:


当点击返回键后,声明周期得调用顺序是:onPause()、onStaop()、onDestroy()。

onPause(),这个方法执行后便失去可焦点,不能响应触摸事件。onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。

onStop(),不可见。

onDestroy(),这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方

法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它。

如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。

接着执行锁屏操作:


执行顺序是:onPause()、onStop()。注意此时,并没有执行onDestory()方法,说明activity此时仅仅是被隐藏了,并没有被杀死。

继续执行,开锁操作:

执行顺序是:onRestart()、onResume()、onResume(),此时,并没有执行onCreate()方法,这样便印证了上面的被隐藏之说,此时仅仅是重启启动被隐藏的activity,并没有重新创建。

    

0 0
原创粉丝点击