Android Activity之間相互調(diào)用與傳遞參數(shù)的原理與用法分析
本文實例講述了Android Activity之間的相互調(diào)用與傳遞參數(shù)。分享給大家供大家參考,具體如下:
Activity之間是如何調(diào)用的
在javaWeb程序中,jsp與jsp之間的調(diào)用是通過重定向完成的,而在Android中,Activity與Activity之間的切換是通過Intent來完成的。
所謂Intent,它是Android中非常重要的內(nèi)置組件,他可以理解為“我要干一件什么事情”。在Android中有3大組件:Activity,Service、Broadcast,他們之間的通信都是通過Intent來完成的,所以Intent其實就是告訴他們之間的每一個人,要干什么事情。
創(chuàng)建自己的Activity
高煥堂先生的Android講義中有如下一段內(nèi)容:
Android的4種嫡系組件(即Activity、Service、IntentReceiver和ContentProvider)之間如何互相溝通呢?這4種嫡系組件都是由Android啟動的,并不是組件之間透過直接呼叫而啟動的。
這段文字總結(jié)的十分精辟,它告訴了讀者(以Activity為例)Activity是Android自啟動的,這樣的話,編程人員必須要明確告訴Android“我的應用程序里面有哪些是你要給我啟動的”,而如何告訴Android這些信息呢,Android為我們提供了一個AndroidManifest.xml文件。在這個文件中,就可以告訴Android這些內(nèi)容。這也是為什么我們在建立了自己的Activity、ContentProvider等之后,必須要在配置文件中進行配置的原因。
以下代碼是在自己定義的一個名為SecondActivity的Activity,其配置代碼如下:
<activity android:name=".SecondActivity" android:label="secondActivity"> </activity>
在android:name一項中中的“.”代表在當前配置文件的默認包名之下。
Activity之間的切換
從一個Activity調(diào)用另一個Activity,十分簡單,只需要創(chuàng)建一個Intent,并且告訴Intent我從哪來,要到哪去,然后執(zhí)行這個Intent,就可以了。示例代碼如下:
Intent i = new Intent(TestActivity.this,SecondActivity.class); startActivity(i);
當然,這樣只能夠做到Activity之間的切換,如果想在切換的同時,由舊的Activity向新的Activity傳遞一些參數(shù),那么就要在startActivity()方法之前,為Intent添加參數(shù),通過putExtra(string,xxx)這組方法,就可實現(xiàn)。
putExtra(string,xxx)方法類似于map,鍵都是String型,值有不公類型,該方法被重載,具體可參考API,示例代碼如下:
Intent i = new Intent(TestActivity.this,SecondActivity.class); i.putExtra("uName", "legend"); i.putExtra("uAge", (short)18); startActivity (i);
獲取Intent傳遞的值
舊的Activity將值傳遞給了新的Activity,那么在新的Activity中,要通過getIntent()方法,方可接收傳遞過來的Intent。得到Intent后通過getxxxExtra()方法,可以取得不同類型的值。如下所示:
Intent i = getIntent(); String uName = i.getStringExtra("uName"); short uAge = i.getShortExtra("uAge", (short) 0);
舊Activity得到新Activity結(jié)束后傳遞的Intent
在開發(fā)中,有這種情況,比如說我們的一個Activity要調(diào)用一個新的Activity,讓后用戶對新的Activity操作完成后,關(guān)閉新的Activity,這時需要將新的Activity中的一些值傳遞給舊的Activity。這就中情況不用自己處理,Android已經(jīng)為我們編寫了一個onActivityResult(int requestCode, int resultCode, Intent data)方法,專門處理這種情況。
首先,在舊的Acitvity中的啟動Intent方法不能再使用之前的startActivity,而要給用startActivityForResult(i, REQUESTCODE1 );方法,該方法第一個參數(shù)為要傳遞的intent,第二個參數(shù)為請求碼,該請求碼其實就是一個整型變量,用于指明是那個方法、或者說是那個控件啟動了該intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent data)方法中,編程使用。讀者這里可以不用深究,看到例子后,便會明白。該處代碼如下:
Intent i = new Intent(TestActivity.this,SecondActivity.class); i.putExtra("uName", "legend"); i.putExtra("uAge", (short)18); startActivityForResult(i, REQUESTCODE1 );
其次,在新的Activity中要接受剛剛傳遞的Intent,接受方法如上所述,這里不再贅述。在新的Acitvity處理完成后,需要同過setResult(Intent i)方法來設置新的Activity結(jié)束后需要傳遞會舊的Activity的Intent。之后調(diào)用新的Activity的finish()方法,結(jié)束新的Acitvity就可以了。代碼如下:
Intent resultIntent = new Intent(); resultIntent.putExtra("uName", "legend2"); resultIntent.putExtra("uAge", (short)22); setResult(RESULTCODE1, resultIntent); SecondActivity.this.finish();
最后,在舊的Activity中重寫onActivityResult(int requestCode, int resultCode, Intent data)方法,該方法的三個參數(shù),這里就不在贅述了,相信讀者一看即明白,這里給出代碼如下:
if(requestCode == REQUESTCODE1){ System.out.println("REQUESTCODE equal"); if(resultCode == SecondActivity.RESULTCODE1){ System.out.println("RESULTCODE equal"); String uName = data.getStringExtra("uName"); short uAge = data.getShortExtra("uAge", (short)0); tv.setText("uName:"+uName+" uAge:"+uAge); } }
參考程序
ActivityTest
補充:
在Intent中,可以攜帶Object類型的信息,讀者查閱API后,可能會放先,putExtra()方法中,并沒有實現(xiàn)object的,但是重載了如下的方法:putExtra(String name, Serializable value),只要將對象實現(xiàn)了Serializable接口,就可以添加進Intent了。
對象序列化及反序列化
一個對象產(chǎn)生后,實際上是在內(nèi)存中開辟了一個存儲空間,方便存儲信息。
對象的序列化,就是一個對象變成二進制數(shù)據(jù)流的一種方法,通過對象的序列化可以方便的實現(xiàn)對象的傳輸與存儲。
如果一個類的對象想要被序列化,必須實現(xiàn)Serializable接口,但是該接口中無方法,它屬于一個標示接口,表示具備了某種能力。
序列化和反序列化,可以理解為:
序列化:程序àObjectOutputStreamà序列化對象
反序列化:序列化對象àObjectInputStreamà程序
在序列化的時候,可以通過serialVersionUID來標識序列化版本。
值得注意的是,序列化存儲的只是對象的成員變量。
ObjectInputStream中的readObject()方法可讀取對象。
ObjectOutputStream中的writeObject()方法可寫入對象。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android視圖View技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進階教程》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設計有所幫助。
- Android 啟動另一個App/apk中的Activity實現(xiàn)代碼
- Android APP啟動方式、啟動流程及啟動優(yōu)化分析
- Android App應用啟動分析與優(yōu)化
- Android實現(xiàn)開機自動啟動Service或app的方法
- Android中通過外部程序啟動App的三種方法
- Android筆記之:App應用之啟動界面SplashActivity的使用
- Android中Okhttp3實現(xiàn)上傳多張圖片同時傳遞參數(shù)
- Android中Activity之間跳轉(zhuǎn)和參數(shù)傳遞的實例
- Android intent之間復雜參數(shù)傳遞方法詳解
- Android Activity中使用Intent實現(xiàn)頁面跳轉(zhuǎn)與參數(shù)傳遞的方法
- Android編程實現(xiàn)啟動另外的APP及傳遞參數(shù)的方法
相關(guān)文章
Android Studio報:“Attribute application@theme or @ icon ”問題的解
這篇文章主要給大家介紹了關(guān)于Android Studio報:“Attribute application@theme or @ icon ”問題的解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2017-12-12關(guān)于android studio通過命令行運行g(shù)radle編譯命令的問題
這篇文章主要介紹了關(guān)于android studio通過命令行運行g(shù)radle編譯命令的問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11Android編程實現(xiàn)的EditText彈出打開和關(guān)閉工具類
這篇文章主要介紹了Android編程實現(xiàn)的EditText彈出打開和關(guān)閉工具類,涉及Android輸入框EditText彈出打開和關(guān)閉功能簡單實現(xiàn)技巧,需要的朋友可以參考下2018-02-02Android基于開源項目xutils3實現(xiàn)下載
這篇文章主要介紹了Android基于開源項目xutils3實現(xiàn)下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11Android 開機自啟動Service實現(xiàn)詳解
這篇文章主要為大家介紹了Android 開機自啟動Service實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06