今天带着大家看一下Activitiy的生命周期,(前几天刚刚回家,然后和朋友们玩了两天~)关于Acitivity是什么东东,我在这里就不做陈述了哦!Activity可以被理解为一个窗口,与用户进行交互的一个界面。那我们今天就了解一下Acitivity的生命周期都由哪些部分组成。
    先贴一张图,可能大家对里面的东西不是很理解,等一下我会解释一下:

Android Activity 能用泛型吗 activity a key_android

当然了,这张图是我在网上找到的,自己画的呢好像有点难看,大家可以看一下,这里的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的走动模式的。我会简述原理,使大家对知识点看起来不是很麻烦~如果有不对的地方,还请大家批评指出。