网上看到过很多关于写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的作用和用法,后面我还会再继续更新。