android

来源:互联网 发布:期货交易源码 编辑:程序博客网 时间:2024/06/05 05:35
关于安卓BindService 绑定问题
BindService 主要用于当用户想要将活动activity与service进行绑定,当activity结束时(调用者)service也跟着一起结束了;而startService()只能用来启动服务,当服务启动后,就与前台活动没有了关系;
当我们要从service外部获得service中的方法内容时,我们必须要Ibinder返回的service对象才能操作;所以我们必须利用bindservice的方式去绑定服务获取binder对象,利用binder的方式去获取service的方法内容;


使用bindservice的具体过程如下:
1)创建意图:Intent intent = new Intent(MainActivity.this,BindService.class);
2)创建bindservice对象:bindService(intent,conn,BIND_AUTO_CREATE);
3)创建内部类MyBinder、新建mybinder对象:
private  MyBinder myBinder = new MyBinder();    class MyBinder extends Binder{        public BindService getService(){            return BindService.this;        }    }


4)onBind()返回mybinder对象:
public IBinder onBind(Intent intent) {        return myBinder;    }


5)通过serviceconnection获取Binder对象进一步来获取service对象,最后调用service中的方法:
ServiceConnection conn = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            BindService.MyBinder binder = (BindService.MyBinder)service;            BindService bindService = binder.getService();            bindService.print();        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };



示例代码:
MainActivity
public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initEvent();    }    ServiceConnection conn = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            BindService.MyBinder binder = (BindService.MyBinder)service;            BindService bindService = binder.getService();            bindService.print();        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    };    private void initEvent() {        findViewById(R.id.button4).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(MainActivity.this,BindService.class);                bindService(intent,conn,BIND_AUTO_CREATE);            }        });        findViewById(R.id.button5).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                unbindService(conn);            }        });    }}


BindService
public class BindService extends Service {        public void print(){        Log.d(TAG, "print: BindService");    }    @Override    public void onCreate() {        super.onCreate();        Log.d(TAG, "onCreate");    }    @Override    public void onStart(Intent intent, int startId) {        super.onStart(intent, startId);        Log.d(TAG, "onStart");    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        Log.d(TAG, "onStartCommand");        return super.onStartCommand(intent, flags, startId);            }    @Override    public void onDestroy() {        super.onDestroy();        Log.d(TAG, "onDestroy");    }    @Override    public boolean onUnbind(Intent intent) {        Log.d(TAG, "onUnbind:");        return super.onUnbind(intent);    }    @Override    public void onRebind(Intent intent) {        Log.d(TAG, "onRebind");        super.onRebind(intent);    }    private  MyBinder myBinder = new MyBinder();    @Nullable    @Override    public IBinder onBind(Intent intent) {        return myBinder;    }    class MyBinder extends Binder{        public BindService getService(){            return BindService.this;        }    }}


0 0
原创粉丝点击