Service 回调 Activity的方法。

这两天研究Android Service,前面已经贴了几遍文章。

下面一个主题就是 :Service 回调 Activity的方法。

=====================================================================

package com.test;

import com.test.service.IService;
import com.test.service.MyService;
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.os.RemoteException;
import android.util.Log;

public class ServiceCallbackActivity extends Activity {

	private static final String TAG = "MyService";
	private IService mService;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Intent i = new Intent(this, MyService.class);
		bindService(i, mConnection, Context.BIND_AUTO_CREATE);

	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		if (mService != null) {
			try {
				mService.unregisterCallback(mCallback);
			} catch (RemoteException e) {
				Log.e(TAG, "", e);
			}
		}
		// destroy的时候不要忘记unbindService
		unbindService(mConnection);
		super.onDestroy();
	}

	private ICallback.Stub mCallback = new ICallback.Stub() {

		@Override
		public void showResult(String result) {
			Log.d(TAG, " result : " + result);
		}
	};

	private ServiceConnection mConnection = new ServiceConnection() {

		@Override
		public void onServiceDisconnected(ComponentName name) {
			Log.d(TAG, "onServiceDisconnected");
			mService = null;
		}

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			Log.d(TAG, "onServiceConnected");
			mService = IService.Stub.asInterface(service);
			try {
				mService.registerCallback(mCallback);
			} catch (RemoteException e) {
				Log.e(TAG, "", e);
			}

		}

	};

}


 

=====================================================================

ICallback.aidl
package com.test;

interface ICallback {
	void showResult(String result);
}

=====================================================================

package com.test.service;

import com.test.ICallback;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;

public class MyService extends Service {

	private final static String TAG = "MyService";

	private RemoteCallbackList<ICallback> mCallbacks = new RemoteCallbackList<ICallback>();

	private IService.Stub mBinder = new IService.Stub() {

		@Override
		public void unregisterCallback(ICallback cb) throws RemoteException {
			if (cb != null)	
				mCallbacks.unregister(cb);
		}

		@Override
		public void registerCallback(ICallback cb) throws RemoteException {
			if (cb != null) 
				mCallbacks.register(cb);
		}
	};

	@Override
	public IBinder onBind(Intent arg0) {
		return mBinder;
	}

	@Override
	public void onCreate() {
		Log.d(TAG, "MyService onCreate");
		// mHandler.sendEmptyMessageDelayed(0, 1000);
		super.onCreate();
		// callBack();
	}

	@Override
	public void onDestroy() {
		Log.d(TAG, "MyService onDestroy");
		mHandler.removeMessages(0);
		super.onDestroy();
	}

	@Override
	public void onStart(Intent intent, int startId) {
		Log.d(TAG, "MyService onStart" + startId);
		callBack();
		super.onStart(intent, startId);
	}

	private void callBack() {
		int n = mCallbacks.beginBroadcast();
		Log.i(TAG, "mCallbacks.beginBroadcast() is " + n);
		try {
			for (int i = 0; i < n; i++) {
				mCallbacks.getBroadcastItem(i)
						.showResult("dddd liud MyService");
			}
		} catch (RemoteException e) {
			Log.e(TAG, "", e);
		}
		mCallbacks.finishBroadcast();
	}

	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			callBack();
			super.handleMessage(msg);
		}
	};

}


 

=====================================================================

IService.aidl

package com.test.service;

import com.test.ICallback;

interface IService {
 void registerCallback(ICallback cb);
 void unregisterCallback(ICallback cb);
}


 

=====================================================================

 

 

你可能感兴趣的:(android,String,service,null,Class,callback)