刚开始学习Android,被Activity搞的晕头转向,看了很多资料,才大概搞清楚。因为那些高手写的都是术语和英文,想看懂文章就像要去威虎山剿匪一样,必须懂那些黑话,要不然基本有去无回。
Activity(活动)其实是“安卓”系统的重要组件(组成部分)之一。Android四大组件有Activity活动,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器。
一个Activity是一个应用程序的组件,通常一个Activity里会有一个页面,用户让用户来操作,完成如打电话、发短信、拍照等功能。
通常一个Activity活动,会有七种状态,厉害吧?
onStart(); —->中文翻译:开始
onRestart(); —->中文翻译:重新开始
onResume(); —->中文翻译:恢复
onPause(); —->中文翻译:暂停
onStop(); —->中文翻译:停止
onDestroy(); —->中文翻译:消毁
为什么会有这么多种状态?因为Android是机器人,不是人,还没有达到人工智能,所以你想让它做什么事,必须详细告诉它每一步要做什么,在做这些事的过程中可能会遇到什么情况,如何处理。
指挥机器人的步骤越详细,越容易让机器人理解。看懂了以上的内容,再来看看原版的图片。
这回大概能理解Activity的工作原理了吧?
接下来,要引入下一个概念:栈,栈(stack)又名堆栈,堆,一堆东西,有点好理解了吧?如果还是不理解,直接就把栈想像成几页A4纸,实际上,就是这原理。
可以把安卓的Activity栈想像成几张A4纸,你看到手机现在的可操作页面就是最顶上的A4纸,你可以在这儿写写画画。需要其它页的时候,通常把这页纸放到下边,再拿一张纸放在最上面(栈顶)。
Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:
当然,以上的基本思路能理解,接下来,我们就可以做实验了。
建立一个新的项目,画两个页面,这个可以会。
然后把如下代码复制到MainActivity.java里:
package com.example.jeffersli.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private static final String TAG = "ActivityDemo";
private Button button,button2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button2=(Button)findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
button2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
finish();
}
});
Log.e(TAG, "start onCreate~~主页面建立,拿起第一本书");
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~主页面开始,开始翻页");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "start onRestart~~主页面重启,找到刚才的书");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~主页面继续,看书");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "start onPause~~主页面暂停,放下");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~主页面停止,第一本书本自动合上");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~主页面消毁,把第一本书放到书架上");
}
}
再建立一个SecondActivity,别忘了在AndroidManifest.xml里注册。语句为:
package com.example.jeffersli.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class SecondActivity extends Activity {
private static final String TAG = "ActivityDemo";
private Button button;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
finish();
}
});
Log.e(TAG, "start onCreate~~第二页面建立,拿起第二本书");
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~第二页面开始,开始翻页");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "start onRestart~~第二页面重启,找到刚才的书");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~第二页面继续,看书");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "start onPause~~第二页面暂停,放下");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~第二页面停止,第二本书本自动合上");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~第二页面消毁,把第二本书放到书架上");
}
}
接下来编译运行,在Logcat窗口就可以看到有意思的内容了,玩一会就理解这些Activity到底在忙啥了。