android傳遞數據
Ⅰ Android Intent的作用,哪些類型的數據可以被傳遞
(1) 要激活一個新的Activity,或者讓一個現有的Activity執行新的操作,可以通過調用Context.startActivity()或者Activity.startActivityForResult()方法。這兩個方法需要傳入的Intent參數也稱為Activity Action Intent(活動行為意圖),根據Intent對象對目標Activity描述的不同,來啟動與之相匹配的Activity或傳遞信息。
(2) 要啟動一個新的服務,或者向一個已有的服務傳遞新的指令,調用Context.startService()方法或調用Context.bindService()方法將調用此方法的上下文對象與Service綁定。
Intent一旦發出,Android都會准確找到相匹配的一個或多個Activity、Service或Broadcast-Receiver作為響應。所以,不同類型的Intent消息不會出現重疊:BroadcastIntent消息只會發送給BroadcastReceiver,而絕不可能發送給Activity或Service。由startActivity()傳遞的消息也只可能發送給Activity,由startService()傳遞的Intent只可能發送給Service。
向下一個Activity傳遞數據(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Intent();
bundle.putString("name", "This is from MainActivity!");
it.putExtras("bd",bundle); // it.putExtra(「test」, "shuju」);
startActivity(it); // startActivityForResult(it,REQUEST_CODE);
Ⅱ 如何將Android手機上的數據轉移到iPhone上面
在iPhone完成新iOS設置進程中,是有多個功能區進行數據轉移的。但是設備一旦激活後,就只能進行恢復出廠設置,清除設備所有數據,再次進行新iOS設置。再次進行新iOS設置進程中,可藉助【轉移到 iOS】APP。1、在安卓手機端,確保WiFi已開啟;2、將 iOS 設備和安卓設備插入電源,避免因電量不足而造成傳輸中止的情況;3、確保 iOS 設備上有足夠的儲存空間來儲存即將轉移的內容,包括外部 Micro SD 卡上的內容;4、如果要轉移Chrome 書簽,請將安卓設備上的 Chrome 更新至最新版本;5、在數據轉移過程中,注意將兩台設備貼近放置,且不要移動設備。一、備份資料備份完成後,當安卓手機數據成功轉移到iPhone後,再進行數據的還原操作即可。二、恢復出廠設置當iPhone進行數據備份後,點開【設置】-【通用】-【還原】,再點擊【還原所有內容和設置】,按照手機界面提示依次進行確認操作即可。三、轉移安卓數據到iOSiPhone還原後,進行新iOS設備的設置,直到出現【APP與數據】功能界面。即可開始Android設備數據到iOS設備的轉移操作。具體操作如下幾個步驟:步驟1:點擊【從安卓設備轉移數據】,按照提示確認操作,點擊繼續,直到出現6位數代碼。步驟2:在安卓手機端安裝好【轉移到 iOS】App。打開運行【轉移到 iOS】App,點擊【繼續】,根據提示授權許可權進行下一步,直到顯示【輸入代碼】。步驟3:在安卓手機端輸入代碼,直到【傳輸數據】功能出現,再選擇自己想要傳輸的數據類型,點擊【下一步】,等待數據轉移進度條走完即可。註:如果安卓設備顯示您的互聯網連接信號弱的警告,您可以忽略這條警告。完成數據轉移後,可繼續完成iPhone設置的設置流程,直到設備正常啟動,再進行已備份數據的還原即可。Ⅲ 如何android多Activity間共享數據
其實有如下5種方式:
1.基於消息的通信機制 Intent ---boudle ,extra
數據類型有限,比如遇到不可序列化的數據Bitmap,InputStream, 或者LinkList鏈表等等數據類型就不太好用。
2. 利用static靜態數據,public static成員變數;
3.基於外部存儲的傳輸, File/Preference/ Sqlite ,如果要針對第三方應用需要Content Provider
4.基於IPC的通信機制context 與Service之間的傳輸,如Activity與Service之間的通信,定義AIDL介面文件。
5. 基於Application Context
這裡面我覺得第五種方法更具普適性,在網上找了篇講解得好的文章,原文如下:
在Android中使用Intent在兩個Activity間傳遞數據時,只能是基本類型數據,或者是序列化對象。Intent是一種基於消息的進程內和進程間通信模型,當我們需要在我們應用程序內部,多個Activity間進行復雜數據對象共享交互時,使用Intent就顯得很不方便。此時,我們就需要一種數據共享的機制來實現。當然,直接使用java語言中的靜態變數是可以的,但在Android中有更為優雅的實現方式。
The more general problem you are encountering is how to save stateacross several Activities and all parts of your application. A staticvariable (for instance, a singleton) is a common Java way of achievingthis. I have found however, that a more elegant way in Android is toassociate your state with the Application context.
--如想在整個應用中使用,在java中一般是使用靜態變數,而在android中有個更優雅的方式是使用Application context。
As you know, each Activity is also a Context, which is informationabout its execution environment in the broadest sense. Your applicationalso has a context, and Android guarantees that it will exist as asingle instance across your application.
--每個Activity 都是Context,其包含了其運行時的一些狀態,android保證了其是single instance的。
The way to do this is to create your own subclass of android.app.Application,and then specify that class in the application tag in your manifest.Now Android will automatically create an instance of that class andmake it available for your entire application. You can access it fromany context using the Context.getApplicationContext() method (Activityalso provides a method getApplication() which has the exact sameeffect):
--方法是創建一個屬於你自己的android.app.Application的子類,然後在manifest中申明一下這個類,這是android就為此建立一個全局可用的實例,你可以在其他任何地方使用Context.getApplicationContext()方法獲取這個實例,進而獲取其中的狀態(變數)。
class MyApp extends Application { private String myState; public String getState(){ return myState; } public void setState(String s){ myState = s; } } class Blah extends Activity { @Override public void onCreate(Bundle b){ ... MyApp appState = ((MyApp)getApplicationContext()); String state = appState.getState(); ... } }
對於Application的生命周期,今天測試了一下,Application類型在該APP被install的時候就已經實例化了,並且onCreate也已經被調用了。
如果需要創建類型裡面可能需要用到的對象的話,就可以在構造函數裡面實現,但是如果需要將該類型bind Service或者registerReceiver等操作時,需要將這些操作放到onCreate中,否則會拋出異常。其原因主要是這個對象還沒有創建完成,此時你用這個對象來bindservice必然會出現意想不到的情況,所以在使用時還需要注意。
Ⅳ android中兩個activity怎麼實現數據傳輸
操作步驟如下:
1、創建Intent對象,並配置參數,有那個activity跳轉到哪個activity
Ⅳ android message傳遞數據到handler的問題
第燃敗一種思想是推薦使仿旦用的,任何函數在調用的時候,涉及到傳遞參數,都會降低效率。根據message的源碼setData(Bundle data)它的注釋:
Sets a Bundle of arbitrary data values. Use arg1 and arg1 members as a lower cost way to send a few simple integer values, if you can.意思是說,盡量使用arg1和arg2傳遞整型數據,降低開銷(lower cost)。因此你的第二種想法完全就是多此一舉,因為Handler的設計思想就是通知主線程更備段擾新數據,用最小的開銷去通知。
Ⅵ android兩個activity之間怎麼傳遞數據
Activity之間是沒有辦法直接傳遞數據的。Android的設計原則是,用Intent在不同的Activity和進程之間進行通信,但是通常來講,Intent中只能存入基本數據類型和系統默認支持的比如Uri之類的。那麼對於用戶自己定義的數據結構是無法直接用Intent來傳送的,如果想要通過Intent來傳遞自定義數據,可以讓數據結構實現Parcelable介面,這樣就可以把數據放入Intent。但是Intent的傳送效率也不是很高,特別是當傳遞一些如Bitmap的大數據,用Intent傳遞超過500K的Bitmap,就會造成Framework層的Java Binder掛掉,結果就是傳遞不成功。
這點可以算成是Android的一個弊端,沒有很好的解決方案。能做到的就是盡量設計的時候注意,盡量讓Activity之間共享基本數據類型。
Android本身的應用中也深受其害,可以看到有很多應用程序的源代碼中的主要的類在三千行以上的不在少數,比如Browser中的BrowserActivity有四千多行;Mms中的ComposeMessageActivity也有四千多行,等等。為什麼一個類會如此之大,就是因為它們是程序的主頁面,是業務的核心邏輯所在,裡面也控制著很多的其他的數據結構,而又無法與另外的Activity共享,所以就只能在一個Activity裡面做所的事情。