<service androID:name=".services.UploadService" androID:process=":UploadServiceProcess" />
我可以使用bindService()成功绑定到它.当我尝试通过调用Messenger.send()发送消息时,我的问题出现了:
service.send(Message.obtain(null,UploadService.MESSAGE_UPLOAD_REQUEST,uploadRequest));
其中uploadRequest是一个实现Parcelable的自定义对象
public class UploadRequest implements Parcelable { public @R_502_6852@ @R_502_6852@; public boolean deleteOnUpload;
public UploadRequest(@R_502_6852@ @R_502_6852@,boolean deleteOnUpload) { this.@R_502_6852@ = @R_502_6852@; this.deleteOnUpload = deleteOnUpload;}private UploadRequest(Parcel in) { this.@R_502_6852@ = new @R_502_6852@(in.readString());}public int describeContents() { return 0;}public voID writetoParcel(Parcel dest,int flags) { dest.writeString(this.@R_502_6852@.getPath());}public static final Parcelable.Creator<UploadRequest> CREATOR = new Parcelable.Creator<UploadRequest>() { public UploadRequest createFromParcel(Parcel in) { return new UploadRequest(in); } public UploadRequest[] newArray(int size) { return new UploadRequest[size]; }};
}
我在我的服务handleMessage中设置了一个断点,但我的应用程序永远不会到达断点.但是,如果不是使用我的自定义UploadRequest对象而是发送null,我会像我期望的那样到达handleMessage断点,但显然我不能做任何事情.我在调用writetoParcel时验证了@R_502_6852@.getPath(),返回非空字符串.这让我相信我的UploadRequest课程中有些东西已经关闭,但是通过谷歌搜索,我看不出我班级有什么问题.有任何想法吗?
解决方法 Message member obj的文档说:An arbitrary object to send to the
recipIEnt. When using Messenger to
send the message across processes this
can only be non-null if it contains a
Parcelable of a framework class (not
one implemented by the application).
For other data transfer use
setData(Bundle). Note that Parcelable
objects here are not supported prior
to the FROYO release.
我的猜测是你遇到了一个问题,因为你正在创建自己的parcelable,这在穿越过程边界时是不允许的.相反,您必须将对象打包成一个包.这也意味着您的对象需要实现Serializable,但不需要是Parcelable.
总结以上是内存溢出为你收集整理的在不同的进程中将自定义对象传递给android服务全部内容,希望文章能够帮你解决在不同的进程中将自定义对象传递给android服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)