1. 程式人生 > >Android四大元件之Activity詳解

Android四大元件之Activity詳解

一、Activity的生命週期:

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    /*建立Activity時被回撥,執行初始化*/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /*啟動Activity時被回撥,也就是當一個Activity變為顯示時被回撥*/
    @Override
    protected void onStart() {
        super.onStart();
    }

    /*重新啟動Activity時被回撥,該方法總是在onStart()方法後執行*/
    @Override
    protected void onRestart() {
        super.onRestart();
    }

    /*暫停Activity時被回撥,該方法需要非常快速的執行。通常用於持久儲存資料,例如我們玩遊戲時,突然來了電話,這時我們就要儲存遊戲狀態*/
    @Override
    protected void onPause() {
        super.onPause();
    }

    /*當Activity由暫停狀態恢復為活動狀態時被呼叫,該方法總是在onPause()方法後執行*/
    @Override
    protected void onResume() {
        super.onResume();
    }

    /*停止Activity時被回撥*/
    @Override
    protected void onStop() {
        super.onStop();
    }

    /*銷燬Activity時被回撥*/
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

二、在AndroidManifest.xml配置Activity:

<application
        android:allowBackup="是否備份" 
        android:icon="@mipmap/圖示檔名"
        android:label="說明性文字"
        android:theme="要應用的主題">
        <activity android:name=".Activity名字">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

三、啟動、跳轉和關閉Activity:

 /*啟動和跳轉*/
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
 /*關閉*/
finish();

四、Activity之間資料傳遞

1.Intent簡單傳值:

Intent intent = new Intent(A.this, B.class);
        intent.putExtra("key", "value");
        startActivity(intent);
        

 Intent intent = getIntent();
        int key = intent.getIntExtra("key", 0);

2.Bundle在Activity之間交換資料:
 Intent intent = new Intent(A.this, B.class);
        Bundle bundle = new Bundle();
        bundle.putString("key", value);
        intent.putExtra(bundle);
        startActivity(intent);

 Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        String key = bundle.getString("key");

五、Activity四種啟動模式

1.standard

預設模式,可以不用寫配置。在這個模式下,都會預設建立一個新的例項。因此,在這種模式下,可以有多個相同的例項,也允許多個相同Activity疊加。

例如:
若我有一個Activity名為A1, 上面有一個按鈕可跳轉到A1。那麼如果我點選按鈕,便會新啟一個Activity A1疊在剛才的A1之上,再點選,又會再新啟一個在它之上……
點back鍵會依照棧順序依次退出。

2.singleTop

可以有多個例項,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會建立新的例項,而會呼叫其onNewIntent方法。

3.singleTask

只有一個例項。在同一個應用程式中啟動他的時候,若Activity不存在,則會在當前task建立一個新的例項,若存在,則會把task中在其之上的其它Activity destory掉並呼叫它的onNewIntent方法。
如果是在別的應用程式中啟動它,則會新建一個task,並在該task中啟動這個Activity,singleTask允許別的Activity與其在一個task中共存,也就是說,如果我在這個singleTask的例項中再開啟新的Activity,這個新的Activity還是會在singleTask的例項的task中。

4.singleInstance

只有一個例項,並且這個例項獨立執行在一個task中,這個task只有這個例項,不允許有別的Activity存在。