Android Bind Service

bind service可以使得 Activity和Service 共同生死

package com.example.testservice;

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;
import android.text.format.Time;
import android.util.Log;
import android.view.Menu;

import com.example.testservice.MyService.MyBinder;

public class MainActivity extends Activity {

	private MyConn myConn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		myConn = new MyConn();
		setContentView(R.layout.activity_main);
		Intent service = new Intent(this, MyService.class);
		bindService(service, myConn, Context.BIND_AUTO_CREATE);

	}

	public class MyConn implements ServiceConnection {

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// TODO Auto-generated method stub
			Log.i(this.getClass().toString(),
					"servic has been created,and i an from activity");
			MyBinder myBinder = (MyBinder) service;
			Log.i(this.getClass().toString(), myBinder.getCounts()
					+ ": result has been invoked");

		}

		@Override
		public void onServiceDisconnected(ComponentName name) {
			Log.i(this.getClass().toString(),
					"servic has been disconnect,and i an from activity");

		}

	}
/**
 * unbind it when destroy unBindService() is recommended
 */
	protected void onDestroy() {
		super.onDestroy();
		unbindService(myConn);
	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}

package com.example.testservice;

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

public class MyService extends Service {

	int result = 0;
	private MyBinder myBinder;
	public boolean run = true;

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		myBinder = new MyBinder();
		Log.i(this.getClass().toString(),
				"some service has been created and started ");
		new Thread(new Runnable() {

			@Override
			public void run() {

				for (int i = 0; i < 10000; i++) {
					if (!run) {
						return;
					}
					result++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					Log.i(this.getClass().toString(), result
							+ "=======change from service");

				}

			}
		}).start();

	}
/**
 * set run = false to stop the count thread
 */
	@Override
	public boolean onUnbind(Intent intent) {

		Log.e("Service", "The Activity has been quit");
		run = false;
		return super.onUnbind(intent);

	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return myBinder;
	}
	/**
	 * activity can get the "result" through the binder
	 * @author sfshine
	 *
	 */

	public class MyBinder extends Binder {
		public int getCounts() {
			return result;
		}

	}
}



posted @ 2012-11-18 10:07  sfshine  阅读(276)  评论(0编辑  收藏  举报