【Android - IPC】之使用Bundle实现IPC

  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中。

 

posted on 2017-03-15 15:41  ITGungnir  阅读(354)  评论(0编辑  收藏  举报

导航