小白带你学安卓——Acitivity的生命周期

来源:互联网 发布:淘宝图片ps教程视频 编辑:程序博客网 时间:2024/04/28 15:48
    今天带着大家看一下Activitiy的生命周期,(前几天刚刚回家,然后和朋友们玩了两天~)关于Acitivity是什么东东,我在这里就不做陈述了哦!Activity可以被理解为一个窗口,与用户进行交互的一个界面。那我们今天就了解一下Acitivity的生命周期都由哪些部分组成。    先贴一张图,可能大家对里面的东西不是很理解,等一下我会解释一下:

    当然了,这张图是我在网上找到的,自己画的呢好像有点难看,大家可以看一下,这里的Acitivity的生命周期一般情况下会有四种情况。这是在图中可以明显看到的。 Activity生命周期的方法不需要显示调用,系统在Actitiy状态变化(创建/显示时/不可见时等)会自己调用。    onCreate:当Actvitiy创建时会调用,做一些初始化工作    onStart:当Actitiy即将可见时候调用    onResume:当Actitiy已经可见,并且即将与用互进行交互  Actitiy此时位于后退栈的顶部    onPause:当有其它的Actitiy即将覆盖此Actitiy时这个方法里面用保存需要保存的数据(停止动画以及一些其它的耗费CPU资源的事情)    onStop:当此窗口完全不可见时会调用(别的Activity将其覆盖)    onDestroy:当Actitiy销毁前会调用(做一些清理性的工作,如果想关闭某个窗口,代码中可以调用finish();方法)    onRestart:当Actitiy被其它窗口完全覆盖(stop),重新导回此Activity时会被调用    接下来说一下图中的四种方法,我对这个理解不是很深入,但是作为小白(有人又告诉我这个是面试的题目问答,所以还是在网上看了一些,然后我自己简单的总结了一下~)    Activity的生命周期:    a.起动一个Actitiy  onCreate--->onStart--->onResume        此时按Back键   onPause--->onStop--->onDestroy    b.如果有另外一个窗口将其完全覆盖  onPause--->onStop        重新导回来    onRestart--->onStart--->onResume    c.如果有另外一个窗口将其不完全覆盖  onPause        重新导回来   onResume    d.如果Activity处于onPause或者onStop状态,如果内存不足,有可能该窗口会被系统干掉,用户重新导回来,会从onCreate重新开始    接下来呢,我贴一下我做测试的代码,供大家进行参考~    这里写三个java文件,第一个是我们的MainAcitivity:
import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;/* * Activity生命周期的方法不需要显示调用,系统在Actitiy状态变化(创建/显示时/不可见时等)会自己调用 */public class MainActivity extends Activity{    /*     * 当Actvitiy创建时会调用    初始化工作     * savedInstanceState:当Actitiy意外销毁时,如果你在onSaveInstanceState保存了数据,这个参数就是前面保存的数据     */    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        LogUtil.d("onCreate...");        //导包的快捷键   ctrl+shift+o        findViewById(R.id.button1).setOnClickListener(new OnClickListener()        {            @Override            public void onClick(View v)            {                //Intent:意图   描述你想干的事情                Intent intent = new Intent(MainActivity.this, SecondActitiy.class);                startActivity(intent);            }        });    }    /*     * 当Actitiy即将可见时候调用   初始化工作     */    @Override    protected void onStart()    {        super.onStart();        LogUtil.d("onStart...");    }    /*     * 当Actitiy已经可见,并且即将与用互进行交互  Actitiy此时位于后退栈的顶部     */    @Override    protected void onResume()    {        super.onResume();        LogUtil.d("onResume...");    }    /*     * 当有其它的Actitiy即将覆盖此Actitiy时     * 这个方法里面用保存需要保存的数据     * 停止动画以及一些其它的耗费CPU资源的事情     */    @Override    protected void onPause()    {        super.onPause();        LogUtil.d("onPause...");    }    /*     * 当此窗口完全不可见时会调用(别的Activity将其覆盖)     */    @Override    protected void onStop()    {        super.onStop();        LogUtil.d("onStop...");    }     /*     * 当Actitiy销毁前会调用      * 做一些清理性的工作     *      * 如果想关闭某个窗口,代码中可以调用finish();方法     */    @Override    protected void onDestroy()    {        super.onDestroy();        LogUtil.d("onDestroy...");    }    /*     * 当Actitiy被其它窗口完全覆盖(stop),重新导回此Activity时会被调用     */    @Override    protected void onRestart()    {        super.onRestart();        LogUtil.d("onRestart...");    }}
    这里有一个Button按钮,点击它就可以跳转到第二个Activity。对于里面提到的Intent意图,我们在后面也会说到,只是现在用它来作为跳转,在这里大家不必去纠结这里~    第二个是我们的SecondActivity文件,这里是第二个Activity
import android.app.Activity;import android.os.Bundle;/* * 创建一个Activity * 1.写一个类继承Activity * 2.重写onCreate方法 * 3.给它给一个布局,关联布局 * 4.要在清单文件中注册 */public class SecondActitiy extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);    }}
    这里给出了创建一个新的Acitivity的步骤流程,大家可以参考一哈。    第三个是我们的logutil文件,这个只是为了用的比较方便一些,所以这样写的,对日志进行了简单的封装
import android.util.Log;//进一步封装日志打印类,给其增加一个开关,以便上线时,关闭日志的打印public class LogUtil{    //开关  是否打印日志    public static final boolean DEBUG = BuildConfig.DEBUG;    private static final String TAG ="TT";    public static void d(String tag,String msg)    {        if(DEBUG)        {            Log.d(tag, msg);        }    }    public static void d(String msg)    {        if(DEBUG)        {            Log.d(TAG, msg);        }    }    public static void d(Object obj,String msg)    {        if(DEBUG)        {            Log.d(obj.getClass().getSimpleName(), msg);        }    }    public static void i(String tag,String msg)    {        if(DEBUG)        {            Log.d(tag, msg);        }    }}
    对于Activity的生命周期的简单总结到这里就先告一个段落了,因为里面还有很多东西需要去讲,所以我会带着大家把小白过渡之后,再和大家一起攻克其他的困难问题~    先给大家做一个预告,下一个文章是关于Activity的走动模式的。我会简述原理,使大家对知识点看起来不是很麻烦~如果有不对的地方,还请大家批评指出。