1.service的生命周期
2.service的启动方式
3.IntentService与Service的区别
4.跨进程调用AIDL
Q. Android的Service生命周期及及启动方式
A.Service的启动主要有两种方式
1.startService()只能启动一次(多次调用只会多次出发onStartCommand方法),并且生命周期不会因为调用者的关闭而关闭,除非调用stopService方法手动关闭.
2.bindService(),service服务会随着调用者的关闭而自动销毁,如果你的调用者关心service中的某些数据,那么建议使用bindService,通过Binder可以桥接service与调用者,这样就可以很容易获取service中的数据.
特别注意
startService()与bindService()一起混合使用的情况是存在的,假设我们需要在调用者退出的情况下扔保持服务,但是又希望能够获取到service中的数据内容.
IntenService与Service
IntentService是对Service的扩展,它可以在onHandleIntent()方法中处理耗时的事件,另外可以启动 IntentService 多次,而每一个耗时操作会以工作队列的方式在IntentService 的 onHandleIntent 回调方法中执行,并且每次只会执行一个工作线程,执行完第一个再执行第二个,以此类推,当任务执行完毕之后,它会自动关闭,无需手动释放
AIDL跨进程调用(Android Interface Definition Language)
//TODO
AIDL跨进程调用 会涉及到 对象的序列化及反序列化,Android中有两种对象的列化及反序列化方式,一种是java原生的Serializable,以及Android上新的实现方式 Parcelable
一个典型的Parcelable实现(或者说模板):
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
推荐阅读:
Parcelable
网友评论