BindService

来源:互联网 发布:博拉网络招聘 编辑:程序博客网 时间:2024/05/17 09:21
public class BindService extends Service {    private int mCount;    private boolean mQuit;    // 定义onBinder方法所返回的对象    private final MyBinder mBinder = new MyBinder();    // 通过继承Binder来实现IBinder类    public class MyBinder extends Binder    {        public int getCount() {            // 获取Service的运行状态:count            return mCount;        }    }    // 必须实现的方法,绑定该Service时回调该方法    @Override    public IBinder onBind(Intent intent) {        System.out.println("Service is Binded");        // 返回IBinder对象        return mBinder;    }    // Service被创建时回调该方法。    @Override    public void onCreate() {        super.onCreate();        System.out.println("Service is Created");        // 启动一条线程、动态地修改count状态值        new Thread() {            @Override            public void run() {                while (!mQuit) {                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                    }                    mCount++;                }            }        }.start();    }    // Service被断开连接时回调该方法    @Override    public boolean onUnbind(Intent intent) {        System.out.println("Service is Unbinded");        return true;    }    // Service被关闭之前回调该方法。    @Override    public void onDestroy() {        super.onDestroy();        this.mQuit = true;        System.out.println("Service is Destroyed");    }}
<!-- 配置该Service组件 --><service android:name=".BindService" >    <intent-filter>        <action android:name="org.crazyit.service.BIND_SERVICE" />    </intent-filter></service>
public class BindServiceTest extends Activity {    Button bind, unbind, getServiceStatus;    // 保持所启动的Service的IBinder对象    BindService.MyBinder mBinder;    // 定义一个ServiceConnection对象    private final ServiceConnection mConnection = new ServiceConnection() {        @Override        // 当该Activity与Service连接成功时回调该方法        public void onServiceConnected(ComponentName name, IBinder service) {            System.out.println("--Service Connected--");            // 获取Service的onBind方法所返回的MyBinder对象            mBinder = (BindService.MyBinder) service;        }        @Override        // 当该Activity与Service断开连接时回调该方法        public void onServiceDisconnected(ComponentName name) {            System.out.println("--Service Disconnected--");        }    };    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        bind = (Button) findViewById(R.id.bind);        unbind = (Button) findViewById(R.id.unbind);        getServiceStatus = (Button) findViewById(R.id.getServiceStatus);        // 创建启动Service的Intent        final Intent intent = new Intent();        intent.setAction("org.crazyit.service.BIND_SERVICE");        bind.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View source) {                // 绑定指定Serivce                bindService(intent, mConnection, Service.BIND_AUTO_CREATE);            }        });        unbind.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View source) {                // 解除绑定Serivce                unbindService(mConnection);            }        });        getServiceStatus.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View source) {                // 获取、并显示Service的count值                Toast.makeText(BindServiceTest.this, "Serivce的count值为:" + mBinder.getCount(), Toast.LENGTH_SHORT).show();            }        });    }}
对于servicer的onBind()方法所返回的IBinder对象来说,它可被当成该Service组件所返回的回调对象,service允许客户端通过该IBinder对象来访问Service内部的数据,这样即可实现客户端与Service之间的通信。


原创粉丝点击