安卓初学者笔记(四):用白话讲明白Activity是什么

刚开始学习Android,被Activity搞的晕头转向,看了很多资料,才大概搞清楚。因为那些高手写的都是术语和英文,想看懂文章就像要去威虎山剿匪一样,必须懂那些黑话,要不然基本有去无回。

Activity(活动)其实是“安卓”系统的重要组件(组成部分)之一。Android四大组件有Activity活动,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器。

一个Activity是一个应用程序的组件,通常一个Activity里会有一个页面,用户让用户来操作,完成如打电话、发短信、拍照等功能。

通常一个Activity活动,会有七种状态,厉害吧?
onStart(); —->中文翻译:开始
onRestart(); —->中文翻译:重新开始
onResume(); —->中文翻译:恢复
onPause(); —->中文翻译:暂停
onStop(); —->中文翻译:停止
onDestroy(); —->中文翻译:消毁

为什么会有这么多种状态?因为Android是机器人,不是人,还没有达到人工智能,所以你想让它做什么事,必须详细告诉它每一步要做什么,在做这些事的过程中可能会遇到什么情况,如何处理。

比如,指挥一个机器人如何看书,如下图:
安卓初学者笔记(四):用白话讲明白Activity是什么_第1张图片

指挥机器人的步骤越详细,越容易让机器人理解。看懂了以上的内容,再来看看原版的图片。
安卓初学者笔记(四):用白话讲明白Activity是什么_第2张图片

这回大概能理解Activity的工作原理了吧?

接下来,要引入下一个概念:,栈(stack)又名堆栈,堆,一堆东西,有点好理解了吧?如果还是不理解,直接就把栈想像成几页A4纸,实际上,就是这原理。

可以把安卓的Activity栈想像成几张A4纸,你看到手机现在的可操作页面就是最顶上的A4纸,你可以在这儿写写画画。需要其它页的时候,通常把这页纸放到下边,再拿一张纸放在最上面(栈顶)。

Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:
安卓初学者笔记(四):用白话讲明白Activity是什么_第3张图片

当然,以上的基本思路能理解,接下来,我们就可以做实验了。
建立一个新的项目,画两个页面,这个可以会。
安卓初学者笔记(四):用白话讲明白Activity是什么_第4张图片

然后把如下代码复制到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到底在忙啥了。

安卓初学者笔记(四):用白话讲明白Activity是什么_第5张图片

你可能感兴趣的:(安卓初学者笔记(四):用白话讲明白Activity是什么)