從Android中Activity之間的通信說開來

 
 
引言
最近兩個星期在研究android的應用開發,學習了android應用開發的基礎知識,基本控件,基本佈局,基本動畫效果,數據存儲,http訪問internet等等基礎知識。
android中有一個概念,叫做activity。什麼叫做activity呢?中文譯爲【活動】。我覺得類比到我們.NET裏面的話,就好比是WinForm中的Form窗體,或者是ASP.NET中的Page頁面,一個activity可以對應一個窗體或者是頁面。
既然是窗體、頁面就需要通信,需要傳值,需要之間的變換。
WinForm窗體變換和ASP.NET中的Page變換
在WinForm中實現窗體變換,也就是一個窗體轉到另外一個窗體,我們會寫下面的代碼(代碼是僞代碼,沒有經過驗證,不保證可以運行,只是爲了說明問題)。
From frmChild=new frmChild();
frmChild.show();
或者是frmChild.showDialog();之類的,看你需要的模態還是非模態。如果需要傳值的話,可以通過構造函數,或者是public屬性,或者是指定parent,在child中使用parent屬性訪問父窗體,然後訪問父窗體的屬性。回傳值也是類似的過程。網上找一下,有一大堆的示例代碼可以參考。我的博客也寫過幾篇窗體傳值的博文。
ASP.NET中頁面變換,我們可以用redirect,transfer,execute,傳值的話,有session,querystring,application,或者是整個頁面也可以。
看了上面的方式,你會發現不管是窗體或者是頁面,跳轉和傳值都比較固定。我說的【固定】是說跳轉的發起者和目標,也就是說這兩者綁定的比較死,不能胡亂跳轉。就好比說,detail1點擊之後只能跳轉到item1,detail2點擊之後只能跳轉到item2。當然,等你有經驗之後,改良你的代碼,實現了item和detail的複用,然後加上一些判斷,解決了一些問題。但是好像還是感覺有點綁在一起的意思。
Android中的Activity之間的變換
在Android中,activity之間的跳轉代碼是這樣的。
 
 
 
Intent intent = new Intent( com.example.UITutorial_V2Activity.this, com.example.sinaweibo.TestActivity.class); 

startActivity(intent); 


從上面的代碼中可以看出來,Intent是com.example.UITutorial_V2Activity和com.example.sinaweibo.TestActivity之間跳轉的中介。上面的代碼實現了從uitutorial到test的跳轉。任何兩個activity之間都可以這麼跳轉,完全沒有activity之間的綁定。如果你想傳值的話,可以寫下面的代碼。
Intent intent = new Intent( com.example.UITutorial_V2Activity.this, com.example.layout.layout2Activity.class); 

Bundle bundle = new Bundle();

 bundle.putString("key1", "value1");

 intent.putExtra("key1", bundle); 

startActivity(intent); 


 
Bundle用來在activity之間傳值。回傳值是另外的一種方法。反正都不會綁死兩個activity。任意兩個activity之間的跳轉傳值,只需要藉助intent這個中介就可以了,把目標告訴他, 傳值告訴他,他就可以完成。
聯想到的
兩個窗體變換、傳值,可以完全的不綁定,只需要根據窗體變換的約定,交給中介去完成這件事。這麼做會給我們帶來極大地靈活性,體會提高複用性。也可以擴展開來,兩個類之間通信,變換,也可以使用類似的機制,避免綁死兩個類,提高獨立性。比如說A、B、C兩個頁面。B頁面需要顯示單個商品的信息,只需要給他商品ID就可以了,然後B會從後端獲取商品的信息來顯示。誰都可以呼叫B頁面,只要交給中介,然後傳值商品ID過來,在B頁面的創建過程中,先獲取ID,然後從後端獲取並顯示商品信息,就可以了。在A、C中都可以調用中介來完成到B的跳轉,以後加個D也可以跳轉到B,不用考慮A、C、D是否存在什麼關係。
說到底,這好像是個設計問題,引出來的編碼問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章