亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android?Activity的生命周期與加載模式是什么

發布時間:2023-02-28 13:55:49 來源:億速云 閱讀:103 作者:iii 欄目:開發技術

這篇文章主要介紹了Android Activity的生命周期與加載模式是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Android Activity的生命周期與加載模式是什么文章都會有所收獲,下面我們一起來看看吧。

Activity的生命周期

Activity是安卓應用的重要組成單元之一,其對于安卓的作用類似于Servlet對于Web應用的作用。

整個Activity生命周期的圖解如下

Android?Activity的生命周期與加載模式是什么

具體的生命周期可以總結成如下幾個步驟

onCreate():Activity啟動后第一個被調用的函數,常用來進行Activity的初始化,如創建View,綁定數據和恢復數據。

onStart():當Activity顯示在屏幕上時,函數被調用。

onRestart():Activity從停止狀態進入活動狀態是調用。

onResume():Activity可以接受用戶輸入時,該函數被調用,此時的activity位于activity棧的棧頂。

onPause():當Activity進入暫停狀態時,該函數被調用,一般用來保存持久的數據或釋放占用的資源。

onStop():當Activity變為不可見后,該函數被調用,Activity進入停止狀態。

onDestroy():在Activity被終止前,被調用。

歸納起來,Activity大概會經歷四種狀態

運行狀態:當前Activity位于前臺,用戶可見,可以獲得焦點

暫停狀態:其他Activity位于前臺,該Activity依然可見,只是不能獲得焦點

停止狀態:該Activity不可見,失去焦點

銷毀狀態:該Activity結束,或Activity所在的進程被結束

我們使用給一個程序來看一下看一下Activity的生命周期。程序非常簡單,就是定義兩個Activity,分別命名為FirstActivity和SecondActivity,先從FirstActivity跳轉到SecondActivity,然后再在SecondActivity銷毀該Activity,最后銷毀FirstActivity

public class FirstActivity extends Activity {
    final String TAG = "-----FirstActivity-----";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);
        // 輸出日志
        Log.d(TAG, "-----onCreate-----");
        TextView textView = findViewById(R.id.text1);
        Button button1 = findViewById(R.id.bn_first1);
        Button button2 = findViewById(R.id.bn_first2);
        // 第一個按鈕跳轉到第二個Activity
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
        // 第二個按鈕銷毀該Activity
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FirstActivity.this.finish();
            }
        });
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "-----onStart-----");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "-----onRestart-----");
    }
    @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.v(TAG, "-----onDestory-----");
    }
}
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        Button button = findViewById(R.id.bn_second);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SecondActivity.this.finish();
            }
        });
    }
}

Android?Activity的生命周期與加載模式是什么

Android?Activity的生命周期與加載模式是什么

最后得到的日志信息如下所示,我們過濾了其他日志,只保留FirstActivity的日志

Android?Activity的生命周期與加載模式是什么

Activity的加載模式

Activity一共有四種加載模式

  • standard:標準模式,這是默認的加載模式

  • singleTop:Task棧頂單例模式

  • singleTask:Task內單例模式

  • singleInstance:全局單例模式

安卓采用Task來管理多個Activity,當我們啟動應用的時候,安卓就會位置創建一個Task,然后啟動這個引用的入口Activity,(即<intent-filter>中配置為MAIN和LAUNCHER的Activity)。

我們可以將Task簡單理解成存放Activity的棧,先加載的Activity位于棧底,后加載的Activity位于棧頂。

Activity的加載模式就是按照什么樣的方式去實例化,加載Activity,并且控制Activity和Task之間的關系。

standard模式

當我們通過standard模式啟動Activity的時候,每次都會創建一個新的Activity示例放置到棧頂。當我們在配置Activity時沒有指定加載模式的時候,采用的就是standard模式。

singleTop模式

這種模式與standard模式基本相同,唯一不同的就是,當要啟動的Activity已經位于棧頂的時候不會創建一個新的實例,而是復用已有的實例。如果我們的目標Activity不位于棧頂,那么還是會創建一個新的實例,這一點和standard模式是一樣的。

singleTask模式

采用singleTask模式的Activity在同一個Task中只有一個實例,當系統采用singleTask模式啟動目標Activity的時候,可分為如下三種情況

如果要啟動的Activity實例不存在,系統會創建一個實例,并且將其置于棧頂

如果要啟動的Activity實例位于棧頂,此時的操作與singleTop模式相同

如果要啟動的Activity實例存在于棧中,但是沒有位于棧頂,那么系統就會將該Activity上的所有Activity移出Task棧,從而使目標Activity轉入棧頂

singleInstance模式

在這種加載模式下,系統保證無論從哪個Task中啟動目標Activity,只會創建一個目標Activity實例,并會使用一個全新的Task棧來加載該Activity實例。

當系統采用singleInstance模式啟動目標Activity時,可分為如下兩種情況

如果要啟動的目標Activity不存在,系統會創建一個全新的Task,再創建目標Activity的實例,并將它加入到新的Task棧頂

如果要啟動的目標Activity已經存在,無論它位于哪個應用程序中,位于哪個Task中,系統都會把該Activity所在的Task轉到前臺,從而使該Activity顯示出來。

關于“Android Activity的生命周期與加載模式是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Android Activity的生命周期與加載模式是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广宁县| 营口市| 观塘区| 吉木萨尔县| 加查县| 马公市| 泸定县| 天台县| 新营市| 兰坪| 怀化市| 邵阳市| 罗源县| 新昌县| 称多县| 外汇| 句容市| 沙坪坝区| 遵化市| 吴江市| 淄博市| 林芝县| 镇康县| 阿图什市| 梅河口市| 潢川县| 金寨县| 青浦区| 焉耆| 沛县| 邢台县| 哈密市| 治县。| 赤峰市| 宜兰县| 海阳市| 化隆| 江城| 进贤县| 广河县| 通榆县|