android 基础一 <Service bind方式>

第一步:创建service服务器类 

public class MyService extends Service

第二步:定义对外提供的接口,我这里定义了两个对外扫描的函数

public interface IScanner {
    public void startScan();
    public void stopScan();
}

第三步:在服务里面定义内部类继承 Binder,实现对外提供的接口

class MyBinder extends Binder implements IScanner

第四步:在onBind 函数里面返回 Binder对象

    public IBinder onBind(Intent intent) {
        Log.e(TAG,"onBind!");
        return new MyBinder();
    }

第五步:在Activity 实现 ServiceConnection接口,获取服务接口来调用服务函数

private class ServiceConnect implements ServiceConnection{
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        iScanner=(IScanner)service;
    }
    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
}

第六步:在Activity  启动服务

Intent intent=new Intent(MainActivity.this,MyService.class);
bindService(intent,serviceConnect,BIND_AUTO_CREATE);

第七步:销毁服务

unbindService(serviceConnect);

第八步:配置文件清单

       <service
            android:name=".MyService"
          />

 

MyService代码
public class MyService extends Service {

    String TAG="MyService";
    @Override
    public IBinder onBind(Intent intent) {
        Log.e(TAG,"onBind!");
        return new MyBinder();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG,"onCreate!");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e(TAG,"onDestroy!");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG,"onStartCommand!");
        return super.onStartCommand(intent, flags, startId);
    }

    class MyBinder extends Binder implements IScanner{
        @Override
        public void startScan() {
            Log.e(TAG,"开始扫描!");
        }

        @Override
        public void stopScan() {
            Log.e(TAG,"停止扫描!");
        }
    }

}

 

Activity 代码

public class MainActivity extends Activity {

    IScanner iScanner;
    ServiceConnect serviceConnect=  new ServiceConnect();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent=new Intent(MainActivity.this,MyService.class);
        bindService(intent,serviceConnect,BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(serviceConnect);
    }

    public void start(View v){
//调用服务里面实现的接口 iScanner.startScan(); }
public void stop(View v){
//调用服务里面实现的接口 iScanner.stopScan(); }
private class ServiceConnect implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { iScanner=(IScanner)service; } @Override public void onServiceDisconnected(ComponentName name) { } } }

 

startService 和 bindService 的区别:



bindService的生命周期:
onCreate->

onBind->
onUnbind->

onDestroy

1.Activity被销毁之后service服务将自动销毁。
2.多次调用bindservice只会执行一次,onCreate 和 onBind
3.不可以在广播中bindService方式启动服务
startService的生命周期:
onCreate->

onStartCommand->
onDestroy
1.service 一直在后台运行,不会跟随Activity一起销毁
2.多次调用sartService,只执行一次OnCreate 但是每次都会执行onStartCommand
3.可以在广播中startService方式启动服务


















posted @ 2019-09-07 16:30  zp007  阅读(1170)  评论(0编辑  收藏  举报