美文网首页
Android知识点总结Service知识点

Android知识点总结Service知识点

作者: 天神Deity | 来源:发表于2018-03-25 10:09 被阅读17次

    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中的数据.

    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

    相关文章

      网友评论

          本文标题:Android知识点总结Service知识点

          本文链接:https://www.haomeiwen.com/subject/cylhcftx.html