通过Intent将对象发送到服务而不进行绑定

时间:2010-02-12 13:18:24

标签: android

是否可以通过Intent将对象发送到Android服务而不实际绑定到服务?或者也许是服务访问对象的另一种方式......

3 个答案:

答案 0 :(得分:24)

您可以像这样调用startService(Intent):

MyObject obj = new MyObject();
Intent intent = new Intent(this, MyService.class);
intent.putExtra("object", obj);
startService(intent);

您要发送的对象必须实现Parcelable(您可以参考此Percelable guide

class MyObject extends Object implements Parcelable {

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

    }

}

使用Service,在onStart()或onStartCommand()方法中,对于api级别5和更高版本,您可以获取对象:

MyObject obj = intent.getParcelableExtra("object");

这就是全部:)

答案 1 :(得分:8)

如果您不想实施 Parcelable ,并且您的对象可序列化

使用此

在发件人Activiy

Intent intent = new Intent(activity, MyActivity.class);

Bundle bundle = new Bundle();
bundle.putSerializable("my object", myObject);

intent.putExtras(bundle);

startActivity(intent);

在收件人中:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object");

适合我的工作尝试。但该对象必须是可序列化的:)

答案 2 :(得分:1)

就像Bino所说,如果你想通过意图将它传递给服务,你需要让你的自定义对象实现Parcelable接口。这将使对象在Android IPC方面“可序列化”,以便您可以将它们传递给Intent的对象putExtra(String,Parcelable)调用。

对于简单的基元类型,已经有一堆setExtra(String,基本类型)方法。但是,据我所知,这不是你的选择,这就是为什么你应该选择一个包裹。