android横竖屏切换的生命周期方法

    xiaoxiao2021-03-26  21

    1.为什么切换横竖屏的时候要重新调用生命周期方法,有无必要,若不调用,岂不是更节约资源 不论是旋转到横屏,还是旋转到竖屏,当旋转发生时,Android会寻找更合适的资源(布局文件)以匹配设备配置。然后就会销毁当前的activity实例,根据新的配置重建一个activity实例。所以相应的生命周期函数就会被调用,1次:先销毁,再重建: 2.一个activity,打印log,代码如下,这里只是在各个方法中打印了log

    public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("MainActivity", "onCreate: "); } @Override protected void onStart() { super.onStart(); Log.e("MainActivity", "onStart: "); } @Override protected void onResume() { super.onResume(); Log.e("MainActivity", "onResume: "); } @Override protected void onPause() { super.onPause(); Log.e("MainActivity", "onPause: "); } @Override protected void onStop() { super.onStop(); Log.e("MainActivity", "onStop: "); } @Override protected void onDestroy() { super.onDestroy(); Log.e("MainActivity", "onDestroy: "); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); Log.e("MainActivity", "onSaveInstanceState: "); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.e("MainActivity", "onRestoreInstanceState: "); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.e("MainActivity", "onConfigurationChanged: "); } }

    (1),虚拟机上运行,切换横竖屏,版本5.1 竖屏切横屏:

    E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    横屏切竖屏:

    E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    (2),4.4版本,真机运行(华为4c) 竖屏切横屏

    E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    横屏切竖屏

    E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    (3),真机运行,activity中android:configChanges=”orientation” 竖屏切换横屏

    E/MainActivity: onConfigurationChanged: E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    相对于没加这个属性的时候多调用了onConfigurationChanged方法

    横屏切换竖屏

    E/MainActivity: onConfigurationChanged: E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    跟竖屏切换横屏一样的 (4)真机运行,添加属性:android:configChanges=”orientation|keyboardHidden” 竖屏切换横屏及横屏切换竖屏:

    E/MainActivity: onConfigurationChanged: E/MainActivity: onPause: E/MainActivity: onSaveInstanceState: E/MainActivity: onStop: E/MainActivity: onDestroy: E/MainActivity: onCreate: E/MainActivity: onStart: E/MainActivity: onRestoreInstanceState: E/MainActivity: onResume:

    (5),真机运行,添加属性: 竖屏切换横屏,横屏切换竖屏

    E/MainActivity: onConfigurationChanged:

    都只会调用这一个方法

    (6)运行在虚拟机上,跟在真机上有区别,具体估计跟android版本,和真机的区别,在实际开发中,运用真机,所以这里不再研究

    (7),按下home键,再启动走的方法

    E/MainActivity: onResume: E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onRestart: E/MainActivity: onStart: E/MainActivity: onResume:

    (8)电源键熄屏,

    E/MainActivity: onPause: E/MainActivity: onStop: E/MainActivity: onStart: E/MainActivity: onResume:
    转载请注明原文地址: https://ju.6miu.com/read-659176.html

    最新回复(0)