android service理解

关于Service最基本的用法是如何启动一个Service,启动Service的方法和启动Activity很类似,都需要借助Intent来实现,下面我们就通过一个具体的例子来看一下。

新建一个Android项目,项目名就叫ServiceStudy

然后新建一个MyService继承自Service,并重写父类的onCreate()、onStartCommand()和onDestroy()方法,新建一个Activity类来操作启动结束Service,并且控制和Service的绑定和解绑Activity

public class ServiceActivity extends Activity {
    MyServiceConn coon;
    MyService.MyBinder mb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_service);
    coon =new MyServiceConn();
    }


  public  void openService(View v){
      Intent intent =new Intent(ServiceActivity.this, MyService.class);
      startService(intent);


  }
    public  void stopService(View v){
        Intent intent =new Intent(ServiceActivity.this, MyService.class);
        stopService(intent);

    }

    public void bindService(View view){
        Intent intent =new Intent(ServiceActivity.this, MyService.class);
        bindService(intent,coon, Service.BIND_AUTO_CREATE);
    }

    public void unbindService(View view){
            unbindService(coon);

    }
public void show(View view){
    mb.fangfa();
}


    public class MyServiceConn implements ServiceConnection{
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mb = (MyService.MyBinder) service;

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }


}
	我们的Activity写好,里边有四个按钮方法分别是启动、销毁、绑定、解绑Service;通过Button的点击事件控制Service 的状态,我们来看看Service里的逻辑代码
public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.d("onB","绑定服务");

        return new MyBinder();
    }


    @Override
    public boolean onUnbind(Intent intent) {
        Log.d("onUnbind","解绑服务");
        return super.onUnbind(intent);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("onCreate","创建");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.d("onStart","开启");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("onDestroy","销毁");
    }


    public void fangfa1(){

        Toast.makeText(this, "访问到service", Toast.LENGTH_SHORT).show();


    }



public class MyBinder extends Binder{
        public void fangfa(){


            fangfa1();
        }


}


}



当启动一个Service的时候,会调用该Service中的onCreate()和onStartCommand()方法。如果当前Service已经被创建过了,不管怎样调用start()方法,onCreate()方法都不会再执行。每次都只会有onStartCommand()方法中的打印日志。
然后点击一下StopService按钮就可以将MyService停止掉了。


2.Activity和MyService之间建立关联
 

bindService()方法接收三个参数,第一个参数就是刚刚构建出的Intent对象,第二个参数是前面创建出的ServiceConnection的实例,第三个参数是一个标志位,这里传入BIND_AUTO_CREATE表示在Activity和Service建立关联后自动创建Service,这会使得MyService中的onCreate()方法得到执行,但onStartCommand()方法不会执行。

然后如何我们想解除Activity和Service之间的关联怎么办呢?调用一下unbindService()方法就可以了,这也是Unbind Service按钮的点击事件里实现的逻辑。

那么如果我们既点击了Start Service按钮,又点击了Bind Service按钮会怎么样呢?这个时候你会发现,不管你是单独点击Stop Service按钮还是Unbind Service按钮,Service都不会被销毁,必要将两个按钮都点击一下,Service才会被销毁。也就是说,点击Stop Service按钮只会让Service停止,点击Unbind Service按钮只会让Service和Activity解除关联,一个Service必须要在既没有和任何Activity关联又处理停止状态的时候才会被销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值