android绑定服务和非绑定服务器,绑定/取消绑定服务示例(android)

c4e5aa70a606355b76598f7d423fd6bb.png

至尊宝的传说

将以下方法添加到您的活动中:private MyService myServiceBinder;public ServiceConnection myConnection = new ServiceConnection() {    public void onServiceConnected(ComponentName className, IBinder binder) {        myServiceBinder = ((MyService.MyBinder) binder).getService();        Log.d("ServiceConnection","connected");        showServiceData();    }    public void onServiceDisconnected(ComponentName className) {        Log.d("ServiceConnection","disconnected");        myService = null;    }};public Handler myHandler = new Handler() {    public void handleMessage(Message message) {        Bundle data = message.getData();    }};public void doBindService() {    Intent intent = null;    intent = new Intent(this, BTService.class);    // Create a new Messenger for the communication back    // From the Service to the Activity    Messenger messenger = new Messenger(myHandler);    intent.putExtra("MESSENGER", messenger);    bindService(intent, myConnection, Context.BIND_AUTO_CREATE);}您可以通过在Activity类上ovverriding onResume()和onPause()绑定到服务。@Overrideprotected void onResume() {    Log.d("activity", "onResume");    if (myService == null) {        doBindService();    }    super.onResume();}@Overrideprotected void onPause() {    //FIXME put back    Log.d("activity", "onPause");    if (myService != null) {        unbindService(myConnection);        myService = null;    }    super.onPause();}请注意,绑定到服务时,仅onCreate()在服务类中调用该方法。在您的Service类中,您需要定义myBinder方法:private final IBinder mBinder = new MyBinder();private Messenger outMessenger;@Overridepublic IBinder onBind(Intent arg0) {    Bundle extras = arg0.getExtras();    Log.d("service","onBind");    // Get messager from the Activity    if (extras != null) {        Log.d("service","onBind with extra");        outMessenger = (Messenger) extras.get("MESSENGER");    }    return mBinder;}public class MyBinder extends Binder {    MyService getService() {        return MyService.this;    }}定义了这些方法之后,您可以在“活动”中找到服务的方法:private void showServiceData() {      myServiceBinder.myMethod();}最后,当某些事件发生时,例如_BOOT_COMPLETED_,您可以启动服务public class MyReciever  extends BroadcastReceiver {    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        if (action.equals("android.intent.action.BOOT_COMPLETED")) {            Intent service = new Intent(context, myService.class);            context.startService(service);        }    }}需要注意的是启动服务的时候onCreate()和onStartCommand()被调用服务类,当另一个事件发生时由您可以停止你的服务stopService() 请注意,事件侦听器应该是在你的Android清单文件registerd:                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值