Android四大组件中,Activity、Service和BroadcastReceiver都支持在Intent中传递Bundle数据。由于Bundle实现了Parcelable接口,所以它可以方便地在不同的进程中进行传输。当然,我们传输的数据必须能够被序列化,比如基本类型的数据、实现了Parcelable接口的对象、实现了Serializable接口的对象以及一些Android支持的特殊对象。
接下来用一个实例来演示Android中使用Bundle实现IPC的功能。在这个例子中,我们使用Bundle从BundleIpcA这个Module中传递一段文字到BundleIpcB这个Module中,在BundleIpcB中接收字符串并显示到屏幕上。
BundleIpcA的Activity中的代码如下:
public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.btn); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("data", "这是A发送的数据!!!"); ComponentName cn = new ComponentName("my.itgungnir.bundleipcb", "my.itgungnir.bundleipcb.MainActivity"); intent.setComponent(cn); intent.putExtras(bundle); startActivity(intent); } }); } }
BundleIpcB的Activity中的代码如下:
public class MainActivity extends AppCompatActivity { private TextView result; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); result = (TextView) findViewById(R.id.result); Bundle bundle = getIntent().getExtras(); if (bundle != null) { result.setText(bundle.getString("data")); } } }
这样,点击A中的按钮时,就可以打开B Activity,并将传输的文字显示在B中。