码迷,mamicode.com
首页 > 其他好文 > 详细

Activity的生命周期

时间:2015-04-24 01:14:00      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:activity生命周期、横竖屏切换

    网上看到过很多关于写activity生命周期的文章,毕竟那是别人总结的,不利于记忆,虽然这是很基础的知识点,但是真正掌握了,对开发还是有诸多好处的,事半功倍的效果,

    

public class MainActivity extends Activity implements OnClickListener {


private Button but;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

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

System.out.println("*****>>>>>onCreate");

but.setOnClickListener(this);

}

        @Override

protected void onSaveInstanceState(Bundle outState) {

System.out.println("******>>>>>>onSaveInstanceState");

super.onSaveInstanceState(outState);

}

        @Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

System.out.println("******>>>>>>onRestoreInstanceState");

super.onRestoreInstanceState(savedInstanceState);

}

@Override

protected void onStart() {

System.out.println("*****>>>>>onStart");

super.onStart();

}


@Override

protected void onResume() {

System.out.println("*****>>>>>onResume");

super.onResume();

}


@Override

protected void onPause() {

System.out.println("*****>>>>>onPause");

super.onPause();

}


@Override

protected void onRestart() {

System.out.println("*****>>>>>onRestart");

super.onRestart();

}


@Override

protected void onStop() {

System.out.println("*****>>>>>onStop");

super.onStop();

}


@Override

protected void onDestroy() {

System.out.println("*****>>>>>onDestroy");

super.onDestroy();

}


@Override

public void onClick(View view) {


switch (view.getId()) {

case R.id.but:

Intent main = new Intent(MainActivity.this, OneActivity.class);

MainActivity.this.startActivity(main); 

break;

default:

break;

}

}

}

    以上也是很简单的代码,就是复写了activity的一些重要的方法,然后通过打印的方式进行验证自己的猜想,

    activity生命周期,正常的流程:onCreate->onStart->onResume->onSaveInstanceState->onPause->onStop->onDestroy

 程序每次运行完onResume之后就进行运行状态,如果此时按下返回键,执行路线onSaveInstanceState->onPause->onStop- >onDestroy

    如果按下home键  执行路线onSaveInstanceState->onPause->onStop此时不会执行onDestroy方法,如果内存吃紧的情况下才会执行destroy

     原来一直很纠结与何时执行onPause何时执行onStop,,,执行onPause方法的时候说是:另一个   activity即将要执行,要覆盖这个activity,执行onStop:这个activity不可见,,,如果把一个activity程序设置成透明,也是不可见的状态

    举例子:从A跳转到B,,,A先执行onPause方法,当B完全可见的时候,也就是说A完全隐藏的时候,才会执行onStop,当系统内存不足的时候吗,系统会自动回收在栈底的activity,

    还有个知识点就是当手机横竖屏进行切换的时候的生命周期的转化:有一些应用时把屏幕写死的,要么就是横屏,要么就是竖屏,因为横竖屏切换的时候会带来一些新的问题,无意间给项目增加很大的难度,

    不设置Android:configChanges的时,切屏会从新调用各个生命周期,切横屏的时候会执行一次,切竖屏的时候会执行两次,

    设置Android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横竖屏时只会执行一次,

    设置activity:configChanges="orientation|keybordHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

        今天先写这么多,关于生命周期的知识还有很多延伸,比如说,状态的保存,onSaveInstanceState和onRestoreInstanceState的作用和用法,后面我还会再继续更新。


本文出自 “清甘茶” 博客,请务必保留此出处http://shunshuncon.blog.51cto.com/8232441/1637749

Activity的生命周期

标签:activity生命周期、横竖屏切换

原文地址:http://shunshuncon.blog.51cto.com/8232441/1637749

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!