又到了暑假,大四的走了,我们理所当然成为了学校的老大,哈哈!今年不打算回家了,在学校和校友一起参加比赛做项目。好久就有写博客的冲动,但老是被各种事情所打扰,今天终于考完试了,于是在安静的宿舍开始提笔写起我的第一篇博客。写博客的目的主要是:总结以下这一年多来接触Android开发中所学到的知识,以此来督促自己不断地前进学习(废话比较多。。。此段可以忽略)

  1. Activity 栈

       Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。

       当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:

  2. Activity的生命周期

   首先看看android developers 网上的activity的生命周期图:




   其实,当初我第一次开始看到此图的时候,也是一头雾水,于是就写了一个Demo简单测试一下,结果就清楚明了了:

package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity {
    private static final String TAG = "ActivityDemo";
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.e(TAG, "---》onCreate()");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "---》onStart()");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "---》onRestart()");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "---》onResume()");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "---》onPause()");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "---》onStop()");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "---》onDestroy()");
    }
}


方法说明:

   1.protected void onCreate(Bundle savedInstanceState)一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据(加载用户数据库保存数据,配置信息)、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。

   2.protected void onStart()该方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。

   3.protected void onResume() 在 Activity 从 Pause 状态转换到 Active 状态时被调用。

    4.protected void onResume()在 Activity 从 Active 状态转换到 Pause 状态时被调用。

    5.protected void onStop()在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。

    6.protected void onDestroy()在 Active 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源清理内存等工作。


打印结果分析:

 第一组

     1.打开应用后执行顺序:onCreate()->onStart()->onResume()

     2.按Back键后结束这个应用:onPause()->onStop()->onDestory()

 第二组

    3.按Home键后:onPause()->onStop()这两个方法,这时候应用程序并没有销毁;紧接着再次进入此程序会执行:onRestart()->onStart()->onResume()

   为了更好的理解Activity的生命周期,从网上找到此图:

   从上图可以看到,最右边下方的Android机器人代表启动一个Activity,经过一系列的操作和过程,经过三个生命周期回调方法,到达金字塔的顶层,爬到顶层就可以供用户操作了。然后从金字塔顶往下,再经过三个生命周期方法,就又到了金字塔的另一边底层,Activity就销毁了。但是当下金字塔的时候,只要没到最下面,都有通道可以回到最顶层。

   1.Activity在onStart方法调用后,就处于可见状态了(visible)


   2.当经过onPause方法后处于暂停状态(Paused),这时Activity处于半透明状态,为不可操作的,比如弹出一个模态框。这时Activity不会执行任何代码

   3.Activity在调用onStop方法后即处于用户不可见的状态了(invisible)


   4.onCreate方法在整个生命周期只会被调用一次


   5.自定义Activity继承Activity类后有没有需要必须实现的方法?答案是没有,但是要想启动和显示一个Activity,就必须实现onCreate方法并指定布局文件


   6.大部分的清理操作应该在onPause和onStop中执行,如果在onCreate中开启了耗时线程或耗资源的线程操纵,应该在onDestroy中杀死线程

  注意:

   系统一般都是在执行完onPause和onStop方法后再执行onDestroy方法,但是当在onCreate方法中调用了Activity的finish()方法后,比如在onCreate方法里启动新的Activity并调用了finish方法,这时系统会直接调用onDestroy方法!

就这些吧,东西比较简单,主要是为了练练博客怎么写,嘿嘿!