安卓安卓面试程序员

学习笔记| (一) 组件篇之Activity

2018-09-11  本文已影响28人  yanerly

一.Activity生命周期:

Activity生命周期.png

分析:

这7个生命周期方法中都不能做耗时任务;

面试问题:

onStart()和onStop()是从是否可见的角度来说的;
onResume()今儿onPause()是从是否在前台的角度来说的;

二.正常情况下activity的生命周期流程图:

onCreate()--->onStart()--->onResume()
onPause()-->onStop()
onPause()  因为这时候activity还可以看到一部分,onStop是在activity由可见到不可见的时候才会回调
onPause()-->onStop()--->onDestroy()
总结:

三.异常情况下activity的生命周期:

  1. 系统配置发生变化导致activity杀死后重建:
-->onSaveInstanceState()-->onStop-->onDestroy()
onSaveInstanceState()可能在onPause()之前或者之后执行

②在onSaveInstanceState()中保存数据,只有在这个activity即将销毁并会再次展示的时候才会调用这个方法

protected void onSaveInstanceState(Bundle outState)
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)

outState.putString("key","value");

这两个都可以用于保存数据,要使用下面的这种形式,必须要在activity中添加android:persistableMode="persistAcrossReboots",这两种onSaveInstanceState同时存在时,会执行onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)

③在onRestoreInstanceState()中恢复数据

 String value = savedInstanceState.getString("key");

④也可以在onCreate中获取保存的值

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState != null){
            String value = savedInstanceState.getString("key");
        }
    }

2.由于内存不够导致activity被回收,回收的顺序是后台-->可见(被弹窗样式的activity挡住)-->前台

3.1和2中分析了activity异常情况下的生命周期,那怎么才能让activity不重新创建呢?
在activity中添加:

android:configChanges="orientation"

其他值:
orientation:屏幕方法发生变化
screenSize:屏幕尺寸发生变化(加了orientation就一定要加它,中间用|),minSdkVersion和targetSdkVersion大于13才起作用
locale:系统语言发生变化

测试:

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
      //1是横屏,2是竖屏
    }
上一篇 下一篇

猜你喜欢

热点阅读