Android中的跨进程回调
package com.example.easytabdemo;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.graphics.PixelFormat;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.example.chirpdemo.ITest;import com.example.chirpdemo.ITestListener;import com.example.easytabdemo.SlideTabHost.TabSpec;public class MainActivity extends Activity { final private static String TAG = "MainActivity"; final Intent myIntent = new Intent("com.pyk.les.IlongExistService"); private boolean startedService = false; private ITest leservice = null; ServiceConnection myServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { leservice = ITest.Stub.asInterface(service); try { leservice.listen(new ITestListener.Stub() { @Override public void onFinished(int result) throws RemoteException { } }); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { leservice = null; Log.i("aaaaaaaaaaaa", "onDisconnected:" + Thread.currentThread()); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startedService = bindService(new Intent("com.my.IService"), myServiceConnection, BIND_AUTO_CREATE); Log.i("aaaaaaaaaaaa", "bindService:" + Thread.currentThread()); Button bt = (Button)this.findViewById(R.id.bt1); bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if ( startedService ) { if ( null != leservice ) { try { leservice.setValue(leservice.getValue() + 1); } catch (RemoteException e) { e.printStackTrace(); } } } } }); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if ( startedService ) { if ( null != leservice ) { try { mEditText.setText(leservice.getValue() + ""); } catch (RemoteException e) { e.printStackTrace(); } } } } }); } @Override public void onStart() { super.onStart(); Log.i("aaaaaaaa", "onStart"); } @Override public void onPause() { super.onPause(); Log.i("aaaaaaaa", "onPause"); } @Override public void onResume() { super.onResume(); Log.i("aaaaaaaa", "onResume"); } @Override public void onStop() { super.onStop(); Log.i("aaaaaaaa", "onStop"); } @Override protected void onDestroy() { if (startedService) { unbindService(myServiceConnection); } Log.i(TAG, "onDestroy"); super.onDestroy(); }}在以上代码中ITestListener为跨进程回调接口