Android 开发基础 Android Activity life Cycle

凡旺 · 2015年05月01日 · 最后由 陈恒捷 回复于 2015年05月12日 · 2457 次阅读
本帖已被设为精华帖!

今天 闲着没事,研究了下 Android 中 Activity 的生命周期,目前有所领悟,本次内容主要是以实践为主,图文结合哈~

一、android 中的 Activity 的活动状态,主要分为 4 中状态:
1、运行
2、暂停
3、停止
4、销毁

二、活动的声明周期
Android 中的 Activity 类中共定义了 7 个回调方法

1、onCreate()
2、onStart()
3、onResume()
4、onPause()
5、onStop()
6、onDestroy()
7、onRestart()

三、3 中生存周期

以上的 7 个方法中,除了 onRestart() 方法,其他的都是两两相对应的;

1、完整生命周期
活动在 onCreate() 和 onDestroy();

2、可见生存周期

活动在 onStart() 和 onStop()

3、前台生存周期

活动在 onResume() 和 onPause()

四、活动周期示意图:

五:身临其境

接下来我么来实战一下,需求如下:

需求:

实现一个应用中的从主界面分别跳转到其他的 2 个界面

步骤:

1、新建一个项目,命名为 ActivityLifeCyle
2、分别创建 2 个 xml 文件;normal_activity.xml 、dialog_activity.xml
3、分别创建 2 个类,NormalActivity.java 、DialogActivity.java
4、在 main_activity.xml 文件添加 2 个 button
5、在 MainActivity 中写如界面跳转动作意图 --》Intent
6、在 AndroidManifest.xml 文件中 注册 NormalActivity.java 、DialogActivity.java

主要代码如下:

1、MainActivity.java

public class MainActivity extends Activity {

    public static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        Button startNormalActivity = (Button)findViewById(R.id.bt1);
        Button startDialogActivity = (Button)findViewById(R.id.bt2);
        startNormalActivity.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                Intent intent = new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);

            }
        });

        startDialogActivity.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                Intent intent = new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);

            }
        });






    }

    @Override
    protected void onStart() {
        // TODO 自动生成的方法存根
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onRestart() {
        // TODO 自动生成的方法存根
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

    @Override
    protected void onResume() {
        // TODO 自动生成的方法存根
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        // TODO 自动生成的方法存根
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        // TODO 自动生成的方法存根
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        // TODO 自动生成的方法存根
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

接下来,我们就开始把应用程序部署到我们真机或模拟器上,

我一开是 部署的时候,我们中 Logcat 中可以看到如下信息:






汇总图:

六:总结

以上就是一个程序的运行周期,每一个动作需要用到的那些方法,当然具体的什么是 运行、停止、暂停啊,这些原理性的东东,度娘、Google 都可以搜索的到的,这里面就没有详细的说明,不懂的或者不理解的,自行查找哈,

本例中,还有个动作没有演示,就是在 MainActivity 界面按 Home 键,此时 MainActivity 处于什么状态呢?又会调用什么方法~~~~~哈哈,看懂上面的,我就不解释啦;

源代码地址:链接:http://pan.baidu.com/s/1mgqrMdU 密码:kljd

大家,可以自己写写,或者下载上面的代码玩一玩,印象很深刻的哈~~~~~

睡觉楼,拜拜~

参考:第一行代码(Android)

共收到 4 条回复 时间 点赞

大赞~~~

大赞,同通过《第一行代码 Android》学习 Android 开发中。
学习到后面你会发现 Fragment 也有生命周期的,而且比 activity 更好玩!

#2 楼 @chenhengjie123 支持 hengjie 来一个 fragment 生命周期总结

#3 楼 @kaitlyn 行,后面我发一个。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册