Android架構系列-如何優美的寫Intent

Tsy遠發表於2019-03-01

本文介紹了一種優美寫Intent的方式,可以在專案開發中遵循這種開發規則

0 Android架構系列文章

該系列文章會不斷更新Android專案開發中一些好的架構和小技巧

系列一 Android架構系列-基於MVP建立適合自己的架構
系列二 Android架構系列-如何優美的寫Intent
系列三 Android架構系列-開發規範
系列四 Android架構系列-封裝自己的okhttp
系列五 Android架構系列-MVP架構的實際應用

1 普通寫Intent的方法和缺陷

普通activity a要呼叫起activity b頁面會這麼寫:
activity a

Intent intent = new Intent(a.this, b.class);
intent.putExtra("is_index", message);
startActivity(intent);複製程式碼

activity b

@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    ...
    String is_index = getIntent().getExtras().getString("is_index");
    ...
}複製程式碼

上面的寫法是大多數Intent寫法,在發起方建立intent。但這種寫法在程式碼量大大增加的時候會出現一個問題。當activity b在各種地方都會被呼叫起的時候,並且會傳入各種各樣不同的extra欄位時,會發現很混亂,哪些發起方使用了哪些extra欄位,每個欄位什麼意思,哪些是必須的等等問題。最終造成b程式碼可讀性變差,讓以後想要呼叫起b的頁面也不清楚需要傳入哪些extra。

so,根據以上問題,無意間看到了google官方example程式碼裡一個使用intent的小技巧。

2 優化寫Intent

同樣是activity a要呼叫起activity b頁面的例子:

Intent intent = b.newIndexIntent(this, text);
startActivity(intent);複製程式碼

activity b


private final static String IS_INDEX = "is_index";

@Override
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    ...
    String is_index = getIntent().getExtras().getString(IS_INDEX);
    ...
}

...

/**
 * 建立intent
 * is_index 是否是首頁跳轉過來的 
 */
public static Intent newIndexIntent(Context context, String message) {
        Intent newIntent = new Intent(context, b.class);
        newIntent.putExtra(IS_INDEX, message);
        return newIntent;
    }複製程式碼

用上面的方法可以保證所有extra全部定義在被呼叫起activity的內部,對外不可見,並可以對每個extra有詳細的註釋(是否必須、在什麼地方呼叫)

結尾

好的專案架構往往是清晰的大框架加上某些優美的小細節,後續繼續整理,未完待續...

更多文章關注我的公眾號

我的公眾號
我的公眾號

相關文章