Android開發技巧 (四) —— 多窗口模式

一、進入多窗口模式

在這裏插入圖片描述

在這裏插入圖片描述

二、多窗口模式下的生命週期

新建一個空項目day23_ispf

多窗口模式並不會改變原有活動的生命週期,只是會將最近交互過的那個活動設置爲運行狀態,另一個可見的活動設置爲暫停態

修改主活動:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "第一個項目";

    @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: 停止態變爲運行態");
    }
}

將這個項目拷貝一份,並將新項目改名爲第二個項目,舊項目改名爲第一個項目,在模擬器安裝兩個項目

1、分別安裝啓動

啓動1
在這裏插入圖片描述
啓動2
在這裏插入圖片描述
在這裏插入圖片描述

2、調試

按下OverView:
在這裏插入圖片描述
將2切到上分屏,發現項目2活動被銷燬重建,到準備交互,最後又到暫停態:
在這裏插入圖片描述
將項目1切到下分屏, 發現項目1活動被銷燬重建,到準備交互:
在這裏插入圖片描述
項目2也被激活交互
在這裏插入圖片描述
此時的截屏:
在這裏插入圖片描述
接下來隨意切換分屏大小,發現兩個項目都會經歷如下過程:

onPause: 準備啓動或恢復另一個活動
onStop: 活動完全不可見
onDestroy: 活動銷燬前
onCreate: 第一次被創建
onStart: 不可見變爲可見
onResume: 準備交互

橫豎屏也會發生上述變化,這裏不再深究,因爲只有其中一個活動會經歷如上過程。。。

三、改變行爲

1、重新創建

活動進入多窗口模式會被重新創建,如果想改變默認行爲,就修改AndroidManifest.xml

<activity android:name=".MainActivity"
	android:configChanges="orientation|keyboardHidden|screenSize|screenLayout">

這樣就不會重新創建活動,而是會將平米發生變化的事件通知到Activity.onConfigurationChanged(),屏幕發生變化時要執行相應的邏輯重寫此方法即可

2、禁用多窗口

只需要在AndroidManifest.xml文件的<application><activity>中添加如下屬性即可:

android:resizeableActivity = "false"

這個屬性在sdk24和以上才能生效,否則無法生效
那麼24以下的怎麼辦呢,只要加入一個屬性即可生效:

android:screenOrientation = "portrait"

這樣會使得應用只支持豎屏,且無法分屏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章