|
今天起,在工作之余记录下一年以来Android所学,虽然都是基础知识,但是整理出来也是非常重要。
Activity作为Android最重要的组件之一,也是初学者第一个会接触到的。
|
http://download.csdn.net/detail/lqgyt1/5184013 例子源码到这里下载。
Activity生命周期
Activity生命周期图解
这是一张广为流传的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里面这样声明
|
<activity android:name=".Activity2" android:theme="@android:style/Theme.Dialog"></activity>
|
第一次启动Activity
按下HOME键再进入,按下返回键再进入。
跳转到Activity2并返回