BindService例子

本文详细介绍了如何在Android应用中利用Service和Binder实现远程方法调用,包括创建Service、实现Binder接口、绑定Service以及在客户端访问Service的方法。通过示例代码演示了从客户端启动Service并获取其引用,进而调用Service内部定义的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.zhf.local;
 
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
 
/**
 * 此例的目的就是拿到MyService的引用,从而可以引用其内部的方法和变量
 *
 * @author Administrator
 *
 */
public class LocalServiceActivity extends Activity {
    /** Called when the activity is first created. */
    private MyService myService;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        Intent intent = new Intent(this, MyService.class);
        bindService(intent, connection, Context.BIND_AUTO_CREATE);
    }
 
    private ServiceConnection connection = new ServiceConnection() {
 
        @Override
        public void onServiceDisconnected(ComponentName name) {
            myService = null;
        }
 
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myService = ((MyService.MyBinder) service).getService();
            System.out.println("Service连接成功");
            // 执行Service内部自己的方法
            myService.excute();
        }
    };
 
    protected void onDestroy() {
        super.onDestroy();
        unbindService(connection);
    };
}

package com.zhf.local;
 
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
 
public class MyService extends Service {
    private final IBinder binder = new MyBinder();
 
    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }
 
    public class MyBinder extends Binder {
        MyService getService() {
            return MyService.this;
        }
    }
 
    public void excute() {
        System.out.println("通过Binder得到Service的引用来调用Service内部的方法");
    }
 
    @Override
    public void onDestroy() {
        // 当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用
        super.onDestroy();
    }
 
    @Override
    public boolean onUnbind(Intent intent) {
        // 当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用
        System.out.println("调用者退出了");
        return super.onUnbind(intent);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值