Android四大组件简述之Activity

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
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值