Android四大组件简述之Activity

来源:互联网 发布:淘宝店铺新店扶持流量 编辑:程序博客网 时间:2024/05/29 08:12

Activity生命周期

Activity生命周期图解

Activity生命周期.png
这是一张广为流传的Activity生命周期图。

Activity的状态

在 android 中,Activity 拥有四种基本状态:
Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。

Activity生命周期及状态转换

在创建一个Activity并启动,生命从**onCreate()-->onStart()-->onResume()**,状态处于Active/Runing。
一个Activity的onCreate()方法在整个生命周期只会被调用一次,除非在这个Activity因为自身或其他原因被销毁掉。
1、Android手机有HOME键和返回键。在按下HOME键之后,当前应用会退回到桌面。此时生命周期执行过程是**onPause()-->onStop();** Activity处于Stoped状态。
2、若返回键功能没有被重写,在按下返回键之后,当前Activity会退出,执行生命周期**onPause()-->onStop()-->onDestroy()**;Activity处于Killed状态,当前Activity已经被销毁。
3、若从Activity1跳转到Activity2,那么只会执行onPause()-->onStop();前一个Activity被存在栈中,处于Stoped状态。
4、什么时候会处于Paused状态呢,Activity在完全看不到的状态下,会处于Stoped状态,如1、3。
但是Activity在某个Activity下,但是没有被完全挡住时,只会执行onPause(),处于Paused状态,这种情况发生在情况3中Activity是以Dialog形式跳转的时候。
5、Activity恢复过程,onPause()是直接恢复到onResume(),onStop()状态是恢复到onStart(),然后执行onResume()。Activity处于running状态。

代码说明

 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
package com.example.activitylifetest;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.util.Log;import android.view.KeyEvent;import android.view.Menu;import android.view.View;public class AndroidLifeTest extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_android_life_test);        sLog("Activity第一次被创建onCreate()");    }    @Override    protected void onStart() {        // TODO Auto-generated method stub        super.onStart();        sLog("onStart");    }    @Override    protected void onResume() {        // TODO Auto-generated method stub        super.onResume();        sLog("onResume");    }    @Override    protected void onPause() {        // TODO Auto-generated method stub        super.onPause();        sLog("onPause");    }    @Override    protected void onStop() {        // TODO Auto-generated method stub        super.onStop();        sLog("onStop");    }    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        sLog("onDestroy");    }    public void onClick(View v)    {        sLog("跳转到Activity2");        Intent intent = new Intent();        intent.setClass(this, Activity2.class);        startActivity(intent);    }    private void sLog(String str)    {        Log.e("Activity1", str);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        // TODO Auto-generated method stub        switch(keyCode)        {        case KeyEvent.KEYCODE_BACK:            sLog("按下返回键");break;        case KeyEvent.KEYCODE_HOME:            sLog("按下Home键");break;        }        return super.onKeyDown(keyCode, event);    }}

Activity2在Mainifest.xml里面这样声明

1
<activity android:name=".Activity2" android:theme="@android:style/Theme.Dialog"></activity>

第一次启动Activity
第一次启动.jpg
按下HOME键再进入,按下返回键再进入。
按下HOME键再进,按下返回键在进.jpg
跳转到Activity2并返回
跳转到Activity2.jpg
跳转到Activity2界面.jpg

原创粉丝点击