本文介紹了一種優美寫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有詳細的註釋(是否必須、在什麼地方呼叫)
結尾
好的專案架構往往是清晰的大框架加上某些優美的小細節,後續繼續整理,未完待續…
更多文章關注我的公眾號