Android學習(一)activity

什麼是activity?

Activity 類是 Android 應用的關鍵組件。它是直接被用戶觀察並進行交互使用。activity官網簡介
Activity 提供窗口供應用在其中繪製界面。此窗口通常會填滿屏幕,但也可能比屏幕小,並浮動在其他窗口上面。要在應用中使用 Activity,您必須在應用的清單中註冊關於 Activity 的信息,並且必須適當地管理 Activity 的生命週期。

activity的基本用法

我們可以直接爲項目添加一個Empty Activity,這樣Android Studio會自動幫我們創建好一個activity需要的全部資源,我們就可以直接進行開發。
我們也可以自己手動創建activity,這樣對一個完整activity所需要的資源,有個更深刻的印象:

  1. 手動創建activity

不勾選Generate Layout File 和 Launcher Activity;
在這裏插入圖片描述

  1. 創建和加載佈局資源

在layout目錄下創建Layout resource file。
當佈局文件創建完成後,我們在第一步創建好activity的onCreate()方法中調用setContentView()方法,爲當前activity加載一個佈局。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
  1. AndroidManifest文件中註冊

在< activity >標籤中使用android:name聲明具體註冊哪一個activity

 <activity android:name=".MainActivity">
  
</activity>

注意:如果該activity爲程序的主活動,還需要額外聲明,否則程序無法運行。在 < activity >標籤中加入< intent-filter >標籤並添加:

 <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

探索Intent在activity中的使用

  1. 使用顯式Intent進行activity跳轉
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
  1. 使用隱式Intent進行activity跳轉

在AndroidManifest文件中的< activity >中加入< intent-filter >標籤並添加如下:

<action android:name="com.test.activity.secondActivity">
<category android:name="android.intent.category.DEFAULT">

然後在代碼中添加如下:

Intent intent = new Intent("com.test.activity.secondActivity");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);

區別在於,不需要指定具體跳轉activity,可以使用在AndroidManifest文件中聲明的消息進行跳轉。

  1. 向下一個activity傳遞數據

跳轉前進行數據存儲,代碼如下:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("test_string", "hello world");
startActivity(intent);

跳轉後進行數據讀取,代碼如下:

Intent intent = getIntent();
String data = intent.getStringExtra("test_string");
  1. 返回數據給上一個activity

其中主要使用的是啓動activity的startActivityForResult()方法。該方法會在啓動的activty銷燬時,將需要的數據返回給上一個activity。

首先,在FirstActivity內部調用startActivityForResult()方法,代碼如下:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);

其次,在SecondActivity內部調用setResult()方法存儲需要返回的數據,再結束當前activity,代碼如下:

Intent intent = new Intent();
intent.putExtra("test_string", "hello world");
setResult(RESULT_OK, intent);
finish();

最後,在FirstActivity內部重寫onActivityResult()方法來接收來自SecondActivity返回的數據。
注意,其中的requestCode和resultCode要對應。

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode) {
            case 1:
                if (requestCode == RESULT_OK) {
                    String s = data.getStringExtra("test_string");
                }
                break;
            default:
                break;
        }
    }

activity的生命週期

掌握activity的生命週期是很重要的,瞭解熟悉它後,對我們的開發中資源的創建和釋放很有幫助。

活動狀態

其中有4個狀態,如下:

  1. 運行狀態
  2. 暫停狀態
  3. 停止狀態
  4. 銷燬狀態

activity的生存期

activity生命週期官網說明.

activity的生存期

方法名 描述說明
onCreate() 當activity第一次創建時,最先執行一次。適用於初始化佈局、控件等等。
onRestart() 當activity在不可見情況下,重新獲取焦點後,活動重新運行。從停止狀態變爲運行狀態時,調用此方法。
onStart() 當activity可見時調用此方法。
onResume() 當activity開始與用戶交互時調用此方。注意,此時activity位於其活動堆棧的頂部
onPause() 當activity失去前臺狀態,不再可聚焦,該activity對用戶仍然可見時調用。注意,如果activity返回到前臺,則緊跟着執行onResume()。如果用戶看不到,則緊跟着執行onStop()。
onStop() 當activity對用戶不再可見時調用此方法。這通常用於停止動畫和刷新UI等。注意,如果該activity返回與用戶交互,則執行onRestart(),如果該activity消失,則執行onDestroy()。
onDestroy() 在activity被銷燬之前最後調用此方法。發生這種情況的原因可能是activity即將結束。

活動的啓動模式

Android提供了4種啓動模式,在開發中,我們需要根據實際情況對activity配置不同啓動模式。
配置方法,在AndroidManifest文件中在< activity >標籤中使用android:launchMode聲明使用模式類型。

standard

該模式是默認模式,未聲明的activity默認使用此模式。
該模式下,每啓動一次activity,它就會入棧,並處於棧頂位置。即時棧中已經存在該activity,它也會創建新的實例併入棧。

singleTop

該模式下,啓動一個activity時,會判斷棧頂是否已經是該activity。如果是,則不創建新的activity。如果不是,則創建新的activity併入棧。

singleTask

該模式比較常用,在啓動一個activity時,會判斷棧中判斷是否已經存在該activity。如果存在,則將該activity之上的其他activity全部出棧,直到該activity處於棧頂結束。如果不存在,則創建新的activity併入棧。

singleInstance

該模式比較特殊。在啓動一個activity時,會啓動一個新的棧來管理該activity。適用場景是需要和其他app共同管理時。

發佈了11 篇原創文章 · 獲贊 0 · 訪問量 148
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章