usingandroid.content.Context
不会起作用,因为它没有实现android.os.Parcelable
.
但是-如果您有一个MyExampleParcelable
要在 AIDL 接口中传输的类(例如)(实际上实现Parcelable
了),则可以创建一个.aidl
文件,MyExampleParcelable.aidl
在其中编写:
package the.package.where.the.class.is;
parcelable MyExampleParcelable;
现在,除非您非常想跨流程交谈,否则您应该考虑本地服务。
编辑(稍微更有帮助):
这是一个本地服务(即它只会在您自己的应用程序和进程中使用)?在这些情况下,通常最好实现一个活页夹并直接返回它。
public class SomeService extends Service {
....
....
public class SomeServiceBinder extends Binder {
public SomeService getSomeService() {
return SomeService.this;
}
}
private final IBinder mBinder = new SomeServiceBinder();
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public void printToast(Context context, String text) {
// Why are you even passing Context here? A Service can create Toasts by it self.
....
....
}
// And all other methods you want the caller to be able to invoke on
// your service.
}
基本上,当Activity
绑定到您的服务时,它只会将结果IBinder
转换为SomeService.SomeServiceBinder
、 call SomeService.SomeServiceBinder#getSomeService()
- 和bang,访问正在运行的Service
实例 + 您可以在其 API 中调用内容。