Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> Android入門:綁定本地服務

Android入門:綁定本地服務

編輯:Android編程入門

一、綁定服務介紹   前面文章中講過一般的通過startService開啟的服務,當訪問者關閉時,服務仍然存在; 但是如果存在這樣一種情況:訪問者需要與服務進行通信,則我們需要將訪問者與服務進行綁定;   如果使用Context.bindService()方法啟動服務,則在服務未創建時,系統會調用服務的onCreate()方法,接著調用onBind()方法,這時就訪問者與服務已經綁定; 如果多次調用bindService()多次綁定服務,則不會有副作用(導致多次綁定);   綁定服務的運行流程如下圖所示:    

二、Bind Service 核心代碼

    綁定與解綁定服務     (1)Context.bindService(Intent service,ServiceConnection conn,BIND_AUTO_CREATE);//綁定服務 (2)Context.unbindService(ServiceConnection conn); //解除綁定服務     ServiceConnection     ServiceConnection為一個接口,用於綁定和解綁定IBinder,因此需要創建一個類實現它; class XxxServiceConnection implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) { //service為在onBind返回的IBinder
//綁定Binder對象
}
@Override
public void onServiceDisconnected(ComponentName name) {
//解綁定Binder對象
}
}     Service類     class XxxService extends Service{ private IBinder binder = new XxxBinder(); public IBinder onBind(Intent intent){ return binder; } public int fun(int a){ //服務提供的方法,但是不能直接調用 ... } private class XxxBinder extends Binder implements IXxxBinder{ //面向接口編程 public return fun1(int a){ //對外暴露的API return fun(a); //內部調用Service的方法 } } }     三、BindService案例       場景:服務提供了加法運算的接口,Activity需要調用服務提供的加法運算方法,並返回結果;   效果說明:       MainActivity.java  
package com.xiazdong.bindservice;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
	private EditText op1,op2;
	private Button button;
	private TextView result;
	private IAddOp binder ;//使用接口IAddOp
	private ServiceConnection conn = new AddOpServiceConnection();
	private OnClickListener listener = new OnClickListener(){
		@Override
		public void onClick(View v) {
			int number = binder.addOpService(Integer.parseInt(op1.getText().toString()), Integer.parseInt(op1.getText().toString()));
			result.setText("result="+number+"");
		}
	};
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        op1 = (EditText)this.findViewById(R.id.op1);
        op2 = (EditText)this.findViewById(R.id.op2);
        result = (TextView)this.findViewById(R.id.result);
        button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(listener);
        Intent service = new Intent(this,AddOpService.class);
        this.bindService(service, conn, BIND_AUTO_CREATE);
    }
	private class AddOpServiceConnection implements ServiceConnection{
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {//綁定服務時調用
			binder = (IAddOp)service;
		}
		@Override
		public void onServiceDisconnected(ComponentName name) {//解綁定服務時調用
			binder = null;
		}
	}
}

AddOpService.java  
package com.xiazdong.bindservice;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

public class AddOpService extends Service {
	private IBinder binder = new AddOpBinder();
	
	public int add(int a,int b){		//服務提供的方法
		return a+b;
	}
	@Override
	public IBinder onBind(Intent intent) {
		return binder;
	}

	private class AddOpBinder extends Binder implements IAddOp{
		public int addOpService(int a, int b) {	//binder對外暴露一個API調用服務提供的方法
			return add(a,b);
		}
	}
}


IAddOpService.java  
package com.xiazdong.bindservice;

public interface IAddOp {
	public int addOpService(int a,int b);
}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved