在编程中,很多时候,不仅需要程序内部需要共享/传递数据(如同一个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之间的数据传递还是十分经常出现的,谨此记之。