记android学习之路----Service

Service

对服务Service的初步认识:
1:服务Service其实就是运行在子线程中的一段程序,没有界面,不需要和用户交互;比如视频,音乐的下载,闹钟的定时等都是通过服务来实现的;

2:服务中用来执行不需要和用户交互,但是又需要它保持一直运行的任务;我们一般将服务和活动中的控件相互绑定,以此来启动或者终止服务;

自定义Service
public class MyService extends Service{
public MyBinder myBinder = new MyBinder();

        public IBinder onBind(Intent intent){

            //将MyBinder的引用返回;
            return myBinder;
        }

        public void onCreate(Bundle savedInstanceSatate){

            super.onCreat();
            //该方法在服务被创建的时候会调用;
        }

        public int onStartCommand(Intent intent,int flags,int StartId){
            super.onStartCommand( intent, flags, StartId);
            //该方法在服务被启动的时候会调用;每启动一次就会调用一次;
        }

        public void onDestory(){
            super.onDestory();
            //在服务被销毁的时候会被调用,一般用于释放一些资源;
        }

        /**
         * 自定义一个Binder,在这个类里面我们可以写一系列的公共方法,这个类的引用会在MyService和Activity绑定的时候返回给Activity;
         * 在activity中我们可以通过这个引用调用MyBinder的任何public的方法;
         */
        class MyBinder extends Binder{

            //这些public方法都是自定义的;

            public void functionOne(){
                Log.i("tag","functionOne has run!")
            };

            public void functionTwo(){
                Log.i("tag","functionTwo has run!")
            };
        }
}

说明:
1:Service是个抽象类,自定义service的时候需要声明一个类继承Service;
2:onBind(Intent intent): 是Service中的唯一一个抽象类;必须实现;
该方法是在Service和Activity绑定的时候会主动调用的一个方法;
绑定成功后会返回一个IBinder类型的引用;通过这个引用我们可以调用MyBinder类里面的公共方法以实现activity对Service执行内容的控制;
3:onCreate():在服务创建的实时会调用;
4:onStartCommand(Intent intent,int flags,int StartId):在服务每次启动的时候都会调用;
5:onDestory():当服务被销毁的时候会调用;一般在这个方法中释放资源;


在Activity中操作Service:

启动服务:
Intent intent = new Intent(MyActivity.this,MyService.class);
startService(intent);
终止服务:
Intent intent = new Intent(MyActivity.this,MyService.class);
stopService(intent);
绑定服务:
Intent intent = new Intent(MyActivity.this,MyService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
在绑定服务这里需要三个参数:
第一个是intent;
第二个是ServiceConnection类型的对象;
第三个是绑定模式:BIND_AUTO_CREATE意思是和activity绑定后自动创建服务;
ServiceConnection:这个类用来处理activity绑定Service和activity解绑Service的;下面用匿名类部类的方式实现:
Public ServiceConnection connection = new ServiceConnection(){
public void onServiceDisconnected(Component name){}

        public void onServiceConnected(Component name,IBinder binder){
            MyService.MyBinder myServiceBinder = (MyService.MyBinder)binder;
            //在这里可以通过Service回调onBind()方法返回的IBinder引用调用MyBinder的公共方法;实现Activity对Service具体执行的任务的控制;
            myServiceBinder.functionOne();
            myServiceBinder.functionTwo();
        }
    }

解绑服务:
unBindService(connection);


Service的生命周期:

startService():启动服务;在启动之后服务会一直保持运行状态;——onCreat()方法会执行,接着onStartCommand()会执行;

stopService():停止服务

stopSelf():停止服务;这两种方法都可以停止服务;——-停止服务之后onDestory()方法会执行;

BindService():绑定服务;绑定服务的时候如果服务是首次启动,则会先调用onCreat()方法创建服务;

unBindService():解绑服务;解绑之后onDestory()会被调用;

注意:startService()方法启动的服务必须由stopService()方法停止;
BindService()方法启动的服务必须由unBindService()方法停止;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值