小白Android开发之路——生命周期

大笑从去年2月份开始写android,小博主断断续续有一年多时间。从最初的看书不知所云(本人计算机专业,但是之前没用过java,也没有工程开发经验,惭愧。。。),到基本能看懂并把它们应用到自己的项目中。入门的过程总是伴随着焦急和烦躁,而当你耐着性子去学,某天你开窍的时候,一切茅塞顿开,你终于可以较为轻松自如的理解和运用。

基本的控件和布局的使用我就不说了,网上此类的教程太多,够大家理解了。今天我想分享的是android的生命周期,哥刚开始看下面这张图的时候


,也是一头雾水啊,心中各种草泥马翻腾,好吧,博主夸张了。。。闭嘴,反正不造文档在说什么,生命周期到底是干嘛用的,出于小主一副天生的好脾气和耐心,终于“一知半解”,网上此类教程也很多,尤其是http://blog.csdn.net/android_tutor/article/details/5772285,这位博主已经写的很好了,图文并茂,建议想了解生命周期的小伙伴们先去看这篇文章。在他讲的基础上,再举个实际应用的例子,生命周期在开发中到底是什么情况下会用到。

android实现的时候,我们主体的代码基本是写在Activity的onCreate()周期中的,而onCreate()只在创建Activity时调用而且只调用一次。那我在onCreate()中设置的一个控件值,比如textview.setText("我最初的值"),如果此时我们要跳转到新的activity执行某些操作,再返回到当前activity的时候,需要设置一个新的textview值,怎么办呢?小伙伴们可能会说,还写在onCreate()不就行了吗?加一个条件判断。那么问题来了,Activity的生命周期被忽略鸟,当前的activity跳转到新的activity中的时候,他将依次进入onPause()甚至一路onStop直至onDestory(),当我们再度回到这个activity的时候,如果当时他停留在onPause()(即没继续向后执行onStop()和onDestory()方法,这种情况是当前Activity没有完全不可见的时候,比如我们新的页面只是一个Dialog,部分遮挡当前页面),他将由onResume()进入activity开始执行,我们此时将想修改textview显示的代码textview.setText("我新的值")写在onCreate()中,显然这条语句是执行不到的,而写在onResume()中,你会惊奇的发现,可以了,就是酱简单。实际中,当前activity完全不可见时,由生命周期流程图我们可知,当前activity会一路执行到onStop()方法,activity再度执行的时候会经历onRestart()和onStart()、onResume()这几个方法,所以我们将extview.setText("我新的值")写在这几个方法中都是可以的。

依照上文讲解,小主给出了一个代码事例,Log每个生命周期的执行情况,TestAcivity中啥都没干,就进去看看,再跳回来。

public class MainActivity extends Activity {
    private final String TAG = "MainActivity";
    private TextView tvTest;
    private Button btnTest;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvTest = (TextView) findViewById(R.id.tv_test);
        btnTest = (Button) findViewById(R.id.btn_test);
        btnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this
                        , TestActivity.class);
                startActivity(intent);
            }
        });
        tvTest.setText("我的当前消息");
    }


    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart");
        tvTest.setText("我的新消息,在onStart");


    }


    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume");
        tvTest.setText("我的新消息,在onResume");
    }


    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause");
    }


    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop");
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestory");
    }


    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart");
        tvTest.setText("我的新消息,在onRestart");
    }
}

启动app的时候,MainActivity中的Log情况是这样的


点击跳转之后,MainActivity的Log情况


从TestActivity跳回去的时候Log,惊奇的发现onRestart没有执行如下图


点击back键退出app,整个回退过程的log日志如下图


如果MainActivity经历了onDestroy,则再次创建时会调用onRestart()。事情是这样的,MainActivity跳至TestActivity,TestActivity再跳回MainActivity时,这三个Activity(两次MainActivity)都压栈保存,当利用返回键退出时,最后压入的MainActivity会调用onDestroy(),back键比home键“绝情”多了,偷笑。此时显示TestActivity界面,再次back,显示MainActivity,由于已经被destroy了,再次打开的时候从onRestart()进入,所以生命周期文档有问题,还是我对流程图理解有偏差,留待大神帮解决 !

好了,小主也是刚入门,从这篇开始,总结自己写android中遇到的知识点,增强自己的理解,大家共同进步!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值