Android开发之道(6)Activity的状态转移

转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant


1、应用的生命周期


一个 Android 应用中的基本模块,是 Activity。此前我们尝试了如何实现在两个 Activity 之间切换。在切换的时候,Activity 的状态的迁移逻辑由开发者在设计程序时控制。可以说是在控制 Activity 的生命周期,从而控制了 Android 应用的生命周期。


与上一篇博文一样,我们创建两个 Activity 分别命名为 Test1 和 Test2,并通过 Intent 来切换。但是我们要 Override 一些方法,在其中加入 Log,以方便我们观察 Activity 的状态转换:


public class Test1extends Activity {


   


    private staticfinal String TAG ="Activity-1";

        public void onStart() {

        super.onStart();

        Log.v(TAG, "onStart");

    }

    public void onResume() {

        super.onResume();

        Log.v(TAG, "onResume");

    }

    public void onPause() {

        super.onPause();

        Log.v(TAG, "onPause");

    }

    public void onStop() {

        super.onStop();

        Log.v(TAG, "onStop");

    }

    public void onDestroy() {

        super.onDestroy();

        Log.v(TAG, "onDestory");

    }

    public void onRestart() {

        super.onRestart();

        Log.v(TAG, "onRestart");

    }

}


其中用到了 Log.v(String tag, String msg),第一个参数 tag 可以方便区分是 Test1 还是 Test2 中的日志。v 表示 verbose,还有 d 表示 debug、i 表示 info、w 表示 warn、e 表示 error。


Test1 和 Test2 之间的切换中也要加入相应的 Log,并且再添加一个结束按钮,用于观察 Activity 被 kill 的过程。


    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button button1 = (Button) findViewById(R.id.button1);

        button1.setOnClickListener(new Button.OnClickListener() {

            @Override

            public void onClick(View paramView) {

            Intent intent = new Intent();

                intent.setClass(Test.this, Test2.class);

                startActivity(intent);

                Test.this.finish();

            }

        });

        Button button3 = (Button) findViewById(R.id.button3);

        button3.setOnClickListener(new Button.OnClickListener() {

            @Override

            public void onClick(View paramView) {

                Test.this.finish();

            }

        });

    }


上面是 Test1 的 onCreate,Test2的类似。其他资源文件和布局文件在此略去。


使用 DDMS 来观察,为了避免“重做车轮”的低效,关于 DDMS 的使用可以参见这位博主的博文《Eclipse调试Android工具集锦之二-DDMS》。我们通过 DDMS 观察到:



启动时载入 Activity1:



Activity1 到 Activity2:



Activity2 结束时:



可以知道 Test1 的状态转换是从 onCreate 的创建开始,到 onStart、onResume 就进入了运行状态。这时如果被切换到 Test2,Test1 就会被 onPause,而 Test2 要经过 onCreate、onStart 和 onResume 的过程。接着,就显示 Test2 不显示 Test1了。但还没完,Test1 还要 onStop 和 onDestory。


当我们的 Activity 很多时,它们的状态控制就很重要了。至于复杂到需要状态机来表述状态转移图那么多而复杂的 Activity 关系的情况,恐怕一般简单的应用型 Android App 还用不到,而且我也 hold 不住的 :P


转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant

-

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值