在編程中,很多時候,不僅需要程序內部需要共享/傳遞數據(如同一個thread,或是不同的thread),不同程序之間(process)也經常需要共享數據。
在Linux系統中,我們經常用到的Linux命令,如"ls -al",其中"-al"是傳給application “ls”的輸入值,下面的數據是"ls"的輸出值。Linux下的不同程序間傳遞數據十分直接明瞭,而Android則不同。
$ ls -al
total 180972
drwxr-xr-x 1 K0402004 1049089 0 八月 16 14:58 ./
drwxr-xr-x 1 K0402004 1049089 0 八月 6 11:38 ../
-rw-r--r-- 1 K0402004 1049089 68425872 八月 3 16:46 gradle-2.10-all.zip
-rw-r--r-- 1 K0402004 1049089 116851656 八月 1 16:37 gradle-4.10.1-all.zip
對於Android而言,則採取不同的方式,採用"intent"進行交互。整理如下,
1. A程序呼叫B程序,並且傳遞數據給B數據
首先新建一個intent,然後把“Component”賦值給intent;如果要傳遞值,則放在“putExra”中;最後呼叫“startActivityForResult”
packageName = "com.xxx.sensor";
activityName = "com.xxx.sensor.IRSensorTest";
mTestItemComponentName = new ComponentName(packageName,activityName);
Intent intent = new Intent();
intent.setComponent(mTestItemComponentName);
intent.putExtra("TESTSTYLE", "Test");
intent.putExtra("LANGUAGE", "English");
startActivityForResult(intent, REQUEST_CODE);
2. Activity B則可以在onCreate()方法中獲得Activity A傳入的數據,
Intent intent = getIntent();
String testStyle = intent.getStringExtra("TESTSTYLE");
String language = intent.getStringExtra("LANGUAGE");
3. Activity B結束時,可以向Activity A傳入返回值,比如測試結果,
(Activity A在啓動Activity B的時候需要呼叫“startActivityForResult()”,而不能只呼叫“startActivity()”)
public void returnWithResult(Activity curActivity, boolean isPass) {
Intent intent = new Intent();
intent.putExtra("result", isPass);
curActivity.setResult(-1, intent);
curActivity.finish();
}
4. Activity A獲取從Activity B傳來的數據, 需要在方法“onActivityResult()”中獲取,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
mReturnResult = data.getBooleanExtra("result", false);
}
。。。。
實際開發中,不同Activity之間的數據傳遞還是十分經常出現的,謹此記之。