Android基础知识

Service两种启动模式

2017-09-20  本文已影响0人  Mayo酱

第一种启动方法

public class StartService extends Service {

    //绑定服务才会调用,必须实现的方法(唯一抽象方法)
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    //首次创建服务时,系统将调用此方法来执行一次性设置程序(在调用onStartCommond或onBind之前)
    @Override
    public void onCreate() {
        super.onCreate();
    }

    //调用startService方法启动Service时会回调
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    //服务销毁时回调,实现资源的清理(线程、资源的监听器,contentprovider等)
    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

第二种启动方法

Service

public class BindService extends Service {

    private int count;
    private boolean quit;
    private Thread thread;
    private LocalBinder binder = new LocalBinder();

    //创建Binder对象返回给客户端,提供数据接口
    public class LocalBinder extends Binder{
        //声明一个方法
        BindService getService(){
            //返回当前对象,这样就可以在客户端调用Service公共方法了
            return BindService.this;
        }
    }

    //把Binder类返回给客户端
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //开启一个线程,count++
    }

    //公共方法
    public int getCount(){
        return count;
    }

    //解除时调用
    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        this.quit = true;
        super.onDestroy();
    }
}

Activity

public class BindActivity extends Activity {

    Button btnBind,btnUnBind,btnGetData;

    //代表与服务器的里链接,两个方法:onServiceConnected(操作者在链接一个服务成功时被回调)和
    // onServiceDisConnected(服务崩溃或者被杀死导致链接中断时被调用)
    private MyConn con;
    private BindService mService;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //创建绑定对象
        final Intent intent = new Intent(this,BindService.class);
        con = new MyConn();
        //开始绑定(回调onBind方法,如果没有创建先执行onCreate)
        //BIND_AUTO_CREATE:活动和服务绑定后自动创建服务,onCreate执行,onStartCommand不执行
        bindService(intent,con,BIND_AUTO_CREATE);

        //获取数据
        if(mService != null){
            //通过绑定服务传递的Binder对象获取Service暴露出来的数据
            mService.getCount();
        }else {
            //还没绑定
        }

        //解除绑定
        if(mService != null){
            mService = null;
            unbindService(con);
        }
    }

    private class MyConn implements ServiceConnection{

        //与服务器交互的接口方法,绑定服务时被回调,在这个方法获取绑定Service传递过来的IBinder对象
        //通过IBinder对象实现宿主与Service的交互
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //绑定成功
            BindService.LocalBinder binder = (BindService.LocalBinder) service;
            mService = binder.getService();
        }

        //当取消绑定时被回调,正常情况下不会被调用,当Service被意外销毁时(如内存不足)才会被调用
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mService = null;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读