又到了暑假,大四的走了,我们理所当然成为了学校的老大,哈哈!今年不打算回家了,在学校和校友一起参加比赛做项目。好久就有写博客的冲动,但老是被各种事情所打扰,今天终于考完试了,于是在安静的宿舍开始提笔写起我的第一篇博客。写博客的目的主要是:总结以下这一年多来接触Android开发中所学到的知识,以此来督促自己不断地前进学习(废话比较多。。。此段可以忽略)
Activity 栈
Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。
当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:
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方法!
就这些吧,东西比较简单,主要是为了练练博客怎么写,嘿嘿!