Service就是没有界面的Activity。用法也就和Activity差不多
需要复写onBind()必须实现的方法,onCreate()创建的时候,onStratCommand()启动的时候,onDestory()销毁的时候
有两种方式可以直接启动关闭Service。startService(intent),stopService(intent) ;
bindService(),unbindService();
生命周期:也就有两种方式 onCreate(),onStart(),onDestory() //会一直运行直到stopService 或者在Service内部调用stopSelf()也会被销毁 比如说下载完成就后就会自己停掉。
onCreate(),onBind(),onUnbind(),onDestory();
IntentService:当需要处理多个Activity发来的请求时进行的操作,就是要被多次运行的Service。是以消息队列的形式一个有一个运行IntentService,运行完自动结束
没有onStartCommand()方法 没有onBind()方法
只需要复写onHandleIntent() 。这个是已经在线程中的内容,所以不用再重新搞线程。直接在里面写想写的代码就行
Service和Activity的通信(有一个绑定的过程),也就是上述的第二种运行情况。 onCreate(),onBind(),onUnbind(),onRebind,onDestory();
实际开发中,我们会先定义一个类继承Binder,来实现自己的IBinder对象。然后生成这个对象,将这个对象在onBind中返回。这个对象用来返回各种在service中得数据。写方法 用的。
绑定的方式是
Intent intent = new Intent(this,Service.class);
bindService(intent,connection,flags);//connection在下面,flags为0时,不会自动创建Service,为Context.BIND_AUTO_CREATE 为自动创建
unbindService(connection);//解除绑定
在相对应的Activity中生成一个ServiceConnection对象 复写onServiceConnected(ComponentName:name,IBinder service)和onServiceDisconnected(ComponentName:Name)两个方法 当连接成功时,返回第一个,当连接断开时返回第二个
其中IBinder就是我们在Service自己创建的Binder子类,从onBind()中来,这个需要类型强转。之后就可以用了。
接下来讲下从Activity怎么把数据再给予Service。在已经打开的过程中
Parcel parcel = Parcel.obtain();//功能类似于Message
parcel.writeInt();
parcel.writenString();
muBinder.transact(code,parcel,reply,flags);//code,只有两种情况,IBinder.LAST_CALL_TRANSACTION 或者IBinder.FIRST_CALL_TRANSACTION parcel为传过去的参数,reply为传回来的parcel,flags暂时为0把。出来之后就可以用了。但是这个数去哪了了呢? 告诉你,在自己之前定义的那个类MyBinder的一个复写方法onTransact中。
在这个方法中,可以readInt(),readString()将东西放在自己想要的地方,之后可以在reply中将数据传回去。
粘性和非粘性Service
在Service被注销后保存操作用的。
关于Service 我还没学好,以后要用再说了