Activity總結(jié)

前言

自己學(xué)習(xí)Android也已經(jīng)非常長的時間了,但是因?yàn)楣ぷ髟騾s從來沒有花時間去整理自己的知識體系,所以乘現(xiàn)在工作不忙,把自己覺得重要的基礎(chǔ)知識點(diǎn)整理出來,方便自己回顧學(xué)習(xí)的東西也能幫助其他的人學(xué)習(xí)和復(fù)習(xí)。本文長期更新。

目錄

  1. Activity的概述
  2. Activity的基本使用
  3. Activity的生命周期
  4. Activity的啟動模式

一, Activity的概述

Activity中文翻譯為活動,可以提供用戶交互的屏幕,用來打電話,拍照,發(fā)郵件,瀏覽地圖等。每個Activity都有一個可以繪制用戶界面的窗口,這個窗口一般全屏,但是也可以小于屏幕并浮動在其它窗口之上。

二,Activity的基本使用

新建Activity

  • 要使用Activity,先新建一個子類繼承Activity,在子類里我們需要根據(jù)Activity的生命周期重寫系統(tǒng)調(diào)用的回調(diào)方法。
  • 清單文件注冊
  • 啟動Activity。從一個Activity跳轉(zhuǎn)到另一個Activity可以使用startActivity方法,使用時傳入一個Intent對象,如果要攜帶數(shù)據(jù)可以在Intent上附加數(shù)據(jù)。

傳遞數(shù)據(jù)

傳遞基本類型數(shù)據(jù)
  1. Activity1跳轉(zhuǎn)前將數(shù)據(jù)放入到Intent
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("datastring", "JackalTsc");
intent.putExtra("dataint", 22);
startActivity(intent);
  1. Activity2中獲取到Intent后提取數(shù)據(jù)
String dataStr = getIntent().getStringExtra("datastring");
int dataInt = getIntent().getIntExtra("dataint", -1);
Log.e("ssssss", "獲取到的數(shù)據(jù)為 " + dataStr + " " + dataInt);
傳遞序列化數(shù)據(jù)
  1. 類序列化 主要實(shí)現(xiàn)Parcelable接口或者Serializable接口
public class User implements Parcelable {

    private String userName;
    private int userAge;

    public User(String userName, int userAge) {
        this.userName = userName;
        this.userAge = userAge;
    }

    protected User(Parcel in) {
        userName = in.readString();
        userAge = in.readInt();
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel in) {
            return new User(in);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(userName);
        dest.writeInt(userAge);
    }

    public String getUserName() {
        return userName;
    }

    public int getUserAge() {
        return userAge;
    }
}
  1. 將可序列化的對象放入Intent中
User user = new User("XiaoMing", 22);
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("dataobject", user);
startActivity(intent);
  1. 在目的Activity中獲取數(shù)據(jù)
User mUser = getIntent().getParcelableExtra("dataobject");

Log.e("ssssss", "獲取到的對象數(shù)據(jù)為 " + 
        mUser.getUserName() + " " + 
        mUser.getUserAge());

三,Activity的生命周期

生命周期流程圖:

1

Activity生命周期主要有7種階段

  • onCreate() 創(chuàng)建,當(dāng)Activity初次創(chuàng)建時調(diào)用
  • onStart() 開始,Activity對用戶可見時調(diào)用
  • onResume() 恢復(fù),Activity獲取用戶焦點(diǎn),正常交互
  • onPause() 暫停,Activity失去用戶焦點(diǎn)但是仍然可見
  • onStop() 停止,Activity不可見時調(diào)用
  • onRestart() 重新開始,Activity從不可見變?yōu)榭梢姇r調(diào)用
  • onDestroy() 銷毀,Activity銷毀

Activity保存兩種狀態(tài)的情況

2

四,Activity的啟動模式

  1. standard模式

標(biāo)準(zhǔn)模式,這是系統(tǒng)默認(rèn)的啟動模式,每次通過這種模式啟動Activity時,系統(tǒng)會在當(dāng)前的任務(wù)棧內(nèi)為目標(biāo)Activity創(chuàng)建新的實(shí)例,并且不會創(chuàng)建新的Task.

  1. singleTop模式

棧頂復(fù)用模式,如果要啟動的Activity的實(shí)例已經(jīng)存在當(dāng)前Task棧頂時,系統(tǒng)會調(diào)用onNewIntent()方法將intent指向它,而不是創(chuàng)建一個新的實(shí)例。如果要啟動的Activity沒有位于棧頂,那么系統(tǒng)會重新創(chuàng)建實(shí)例,并將它加載到Task棧頂。

  1. singleTask模式

棧內(nèi)復(fù)用模式,首先檢測整個Activity棧中是否存在要啟動的Activity,如果要啟動的Activity存在但不是位于棧頂,則會先將該Activity以上的其它Activity銷毀,再將要啟動的Activity置頂,如果位于已經(jīng)棧頂,那么和singleTop模式一樣,如果如果要啟動的Activity不存在,則會創(chuàng)建Activity的實(shí)例并加入棧頂。

  1. singleInstance模式

全局單例模式,這種啟動模式下,系統(tǒng)保證無論從哪個Task中啟動目標(biāo)Activity,都只會創(chuàng)建一個實(shí)例,而且該實(shí)例會單獨(dú)存在一個Task中,在這個Task中有且僅有這一個Activity。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容