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
privatefinalstaticString IS_INDEX ="is_index";@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);? ? ...? ? String is_index = getIntent().getExtras().getString(IS_INDEX);? ? ...}.../**
* 創建intent
* is_index 是否是首頁跳轉過來的
*/publicstaticIntentnewIndexIntent(Context context, String message){? ? ? ? Intent newIntent =newIntent(context, b.class);? ? ? ? newIntent.putExtra(IS_INDEX, message);returnnewIntent;? ? }
用上面的方法可以保證所有extra全部定義在被調用起activity的內部,對外不可見,并可以對每個extra有詳細的注釋(是否必須、在什么地方調用)