簡介
先看代碼
public static void openActivity(Context context) {
Intent intent=new Intent(context,SecondActivity.class);
context.startActivity(intent);
}
這個靜態(tài)方法openActivity()寫在SecondActivity里面。
第一個Activity 通過第二個Activity 的靜態(tài)方法openActivity()去打開第二個Activity 。
SecondActivity.openActivity(this);
現(xiàn)在很多人這樣寫代碼了挟炬,其實翻看Android 源碼的例子就能看到里面也有很多類似的免绿。那么為什么這么寫呢磁玉。這么寫有什么好處呢交胚。如果沒有好處大家都不會這么干了。
其實如果只看上面的代碼芯丧,我可以很負責的告訴你可能真的沒啥好處,你可以直接在BaseActivity里面封裝openActivity()方法世曾,然后傳入想跳轉(zhuǎn)的頁面就OK了缨恒。我的項目的Base里面都會封裝這個方法。
那么為什么這么寫呢轮听,這樣寫最大的好處一般是傳參數(shù)的時候用最方便肿轨,比如我們一般從列表頁面跳轉(zhuǎn)到詳情頁面的時候會傳遞一個詳情頁的id 然后通過id獲取網(wǎng)絡(luò)請求。
那么我們代碼就應(yīng)該這樣寫
private static final String DETAIL_ID = "detail_id";
public static void openActivity(Context context蕊程,String detail_id) {
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra(DETAIL_ID , detail_id);
context.startActivity(intent);
}
這樣寫跟直接寫在調(diào)用的第一個Activity 是不同的椒袍。
第一個不同就是耦合度降低了,第一個Activity 不需要關(guān)心傳入的字段是什么藻茂,只需要調(diào)用方法把內(nèi)容傳過去就好了驹暑。
第二個好處就是復(fù)用
這個代碼可以給無數(shù)個Activity 調(diào)用,而不是只給一個調(diào)用辨赐,如果有2個地方需要來這個Activity 那么每個Activity 的代碼變的更加簡潔
//每個Activity 調(diào)用的地方是這樣的
SecondActivity.openActivity(this优俘,detail_id);
//而不是
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra(DETAIL_ID , detail_id);
context.startActivity(intent);
// 看到了,復(fù)用的時候是不是更加簡潔
這還不夠掀序。還有更神奇的地方帆焕。
就是如果這個 Activity 因為需求變動需要重新傳人一個值,現(xiàn)在變成兩個值的時候,我只要在這個方法后面加一個參數(shù)就可以叶雹,而且如果我之前有調(diào)用的地方财饥,就會編譯錯誤。這樣就可以很方便的更改避免bug折晦。如果是過去的方式钥星,可能有3個調(diào)用的地方,而我只改了兩個满着。那么就會出現(xiàn)出現(xiàn)一個參數(shù)異常谦炒。不過如果細心一定可能也不會出錯,只是這樣寫风喇,可以避免3個地方參數(shù)不一樣而在編譯期通過的問題宁改。避免部分bug。