Activity生命周期

来源:互联网 发布:软件著作权变更流程 编辑:程序博客网 时间:2024/06/18 08:42

这里写图片描述

Activity生命周期
* onCreate:创建时调用
* onStart:在屏幕上可见,但是还没有获得焦点
* onResume:可见并且获得焦点
* onPause:可见,但是失去焦点
* onStop:不可见
* onDestroy:销毁时调用
* 手机内存不足时,会杀死之前启动的进程,按照LRU算法(最近最少使用)锁定杀死谁
* Activity生命周期

void onCreate()

  • Activity已经被创建完毕

void onStart()

  • Activity已经显示在屏幕,但没有得到焦点

void onResume()

  • Activity得到焦点,可以与用户交互

void onPause()

  • Activity失去焦点,无法再与用户交互,但依然可见

void onStop()

  • Activity不可见,进入后台

void onDestroy()

  • Activity被销毁

void onRestart()

  • Activity从不可见变成可见时会执行此方法

使用场景

  • Activity创建时需要初始化资源,销毁时需要释放资源;或者播放器应用,在界面进入后台时需要自动暂停

完整生命周期(entire lifetime)

onCreate–>onStart–>onResume–>onPause–>onStop–>onDestory

可视生命周期(visible lifetime)

onStart–>onResume–>onPause–>onStop

前台生命周期(foreground lifetime)

onResume–>onPause

横竖屏切换的生命周期

默认情况下 ,横竖屏切换, 销毁当前的activity,重新创建一个新的activity

在一些特殊的应用程序常见下,比如游戏,不希望横竖屏切换activity被销毁重新创建
需求:禁用掉横竖屏切换的生命周期

  1. 横竖屏写死
    android:screenOrientation=”landscape”
    android:screenOrientation=”portrait”

  2. 让系统的环境 不再去敏感横竖屏的切换。

     android:configChanges="orientation|screenSize|keyboardHidden"

横竖屏切换
* 默认情况横竖屏切换会触发生命周期方法重新执行,Activity销毁重建
* 用以下代码让横竖屏切换时不重建Activity

    android:configChanges="orientation|screenSize|keyboardHidden"

* 用以下代码写死屏幕方向

    android:screenOrientation="portrait"
public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //写死横屏        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        System.out.println("主create");    }    @Override    protected void onStart() {        // TODO Auto-generated method stub        super.onStart();         System.out.println("主start");    }    @Override    protected void onResume() {        // TODO Auto-generated method stub        super.onResume();         System.out.println("主resume");    }    @Override    protected void onPause() {        // TODO Auto-generated method stub        super.onPause();         System.out.println("主pause");    }    @Override    protected void onStop() {        // TODO Auto-generated method stub        super.onStop();         System.out.println("主stop");    }    @Override    protected void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();         System.out.println("主destroy");    }    @Override    protected void onRestart() {        // TODO Auto-generated method stub        super.onRestart();         System.out.println("主restart");    }    public void click(View v){        Intent intent = new Intent(this, SecondActivity.class);        startActivity(intent);    }}
public class SecondActivity extends Activity {     @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_second);            System.out.println("二create");        }        @Override        protected void onStart() {            // TODO Auto-generated method stub            super.onStart();             System.out.println("二start");        }        @Override        protected void onResume() {            // TODO Auto-generated method stub            super.onResume();             System.out.println("二resume");        }        @Override        protected void onPause() {            // TODO Auto-generated method stub            super.onPause();             System.out.println("二pause");        }        @Override        protected void onStop() {            // TODO Auto-generated method stub            super.onStop();             System.out.println("二stop");        }        @Override        protected void onDestroy() {            // TODO Auto-generated method stub            super.onDestroy();             System.out.println("二destroy");        }        @Override        protected void onRestart() {            // TODO Auto-generated method stub            super.onRestart();             System.out.println("二restart");        }        public void click(View v){            Intent intent = new Intent(this, SecondActivity.class);            startActivity(intent);        }}

参考:Android Activity

原创粉丝点击