下拉状态栏&多窗口的生命周期

下拉状态栏生命周期

下拉通知栏对Activity的生命周期没有影响。

onPause()是否调用的关键就是,是否有另一个Activity参与进来了。
而网上流传甚广的onPause()和onStop()调用中提到的“遮挡”,应该修正为“被Activity遮挡”

PS: 根据AlertDialog和Toast的源码,可以发现它们显示的原理,都是通过WindowManager.addView()来显示的。也就是说,AlertDialog和Toast可以看做是当前Activity的一部分View,当然也不会对Activity的生命周期构成影响。


多窗口生命周期

我们都知道,使用多窗口的时候应用界面就会缩小很多,我们需要考录不同屏幕尺寸的适配模式,所以尽量不要出现屏幕尺寸变化过大界面无法正常显示的情况~

下拉状态栏&多窗口的生命周期_第1张图片

那么,
既然多窗口这么烦啊哈哈,
我们如何禁用呢?

禁用多窗口

resizeableActivitytargetSdkVersion为24以上才起作用,否则该属性无效。

// Application中
// false表示禁用,默认为true
android:resizeableActivity="false"

targetSdkVersion低于24时,活动不允许横竖屏切换,应用也将不支持多窗口模式。

// 在activity中,portrait表示只支持竖屏,landscape只支持横屏
android:screenOrientation="portrait"

多窗口下的生命周期

// FirstApp
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "FIRST_APP";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }
}
// SecondApp同上

启动FirstApp

FirstApp:onCreate() -> onStart() -> onResume()

当FirstApp处于onResume()状态时,进入多窗口模式,MainActivity经历了重新创建的过程。

FirstApp:onPause() -> onStop() -> onDestory() -> onCreate() -> onStart() -> onResume() ->onPause()

启动SecondApp

SecondApp:onCreate() -> onStart() -> onResume()

操作FirstApp

SecondApp:onPause()

FirstApp:onResume()

PS

  • 最好不要在活动的onPause()方法中处理视频播放器的暂停,应该在onStop()总进行处理,在onStart()中回复视频播放。
  • AndroidManifest.xml这对活动进行配置,活动不会被重建。将屏幕变化通知到Activity中的onConfigurationChanged()方法中。
// activity中
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"

你可能感兴趣的:(下拉状态栏&多窗口的生命周期)