service一直再运行,通过bindService拿到service的代理,并将自己到回调对象注册过去,就能实现调用service中的方法,和在service中调用本地activity到方法。做到了进程间通信。
- package com.test;
-
-
import com.test.Ilisten;
-
-
interface ImyserviceManager
-
{
-
int add(int a,int b);
-
String show();
-
void register(Ilisten listen);
- }
RemoteService.java
- package com.test;
-
-
import android.app.Service;
-
import android.content.Intent;
-
import android.os.IBinder;
-
import android.os.RemoteException;
-
import android.util.Log;
-
-
public class RemoteService extends Service
-
{
-
Ilisten myListener = null;
-
public class ServiceImpl extends ImyserviceManager.Stub
-
{
-
public int add(int a,int b)throws RemoteException
-
{
-
if(myListener != null)
-
myListener.change("this is call back!");
-
return (a+b);
-
}
-
-
public String show()throws RemoteException
-
{
-
return "hello world!";
-
}
-
-
public void register(Ilisten listen) throws RemoteException
-
{
-
// TODO Auto-generated method stub
-
myListener = listen;
-
}
-
}
-
-
-
-
@Override
-
public IBinder onBind(Intent intent)
-
{
-
// TODO Auto-generated method stub
-
return new ServiceImpl();
-
}
-
-
@Override
-
public int onStartCommand(Intent intent, int flags, int startId) {
-
// TODO Auto-generated method stub
-
Log.i("test","I am running .......................");
-
return super.onStartCommand(intent, flags, startId);
-
-
}
-
-
- }
Ilisten.aidl
- package com.test;
-
-
interface Ilisten
-
{
-
void change(String a);
- }
TestAidl.java
- package com.test;
-
-
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;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.widget.Button;
-
import android.widget.TextView;
-
-
public class TestAidl extends Activity
-
{
-
String str = null;
-
private ImyserviceManager myManager;
-
Button myButton;
-
private TextView textView;
-
private Button button1;
-
private Button button2;
-
-
private ServiceConnection serviceConnection =new ServiceConnection()
-
{
-
-
public void onServiceConnected(ComponentName name, IBinder service)
-
{
-
// TODO Auto-generated method stub+
-
-
myManager=ImyserviceManager.Stub.asInterface(service);
-
try {
-
Log.i("test-------",myManager.show());
-
TextView textView=(TextView)findViewById(R.id.text);
-
textView.setText(str);
-
myManager.register(new myListener());
-
-
} catch (RemoteException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
-
public void onServiceDisconnected(ComponentName name)
-
{
-
// TODO Auto-generated method stub
-
-
}
-
-
};
-
-
public class myListener extends Ilisten.Stub
-
{
-
-
public void change(String a) throws RemoteException
-
{
-
// TODO Auto-generated method stub
-
-
button1.setText(a);
-
-
}
-
-
}
-
-
/** Called when the activity is first created. */
-
@Override
-
public void onCreate(Bundle savedInstanceState)
-
{
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
bindService(new Intent(TestAidl.this, RemoteService.class), serviceConnection, Context.BIND_AUTO_CREATE);
-
-
textView=(TextView)findViewById(R.id.text);
-
-
button1 = (Button) findViewById(R.id.b1);
-
-
button1.setOnClickListener(new View.OnClickListener() {
-
-
public void onClick(View v)
-
{
-
try {
-
button1.setText(myManager.show());
-
//myManager.add(1, 2);
-
} catch (RemoteException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
});
-
-
button2= (Button)findViewById(R.id.b2);
-
button2.setOnClickListener(new View.OnClickListener() {
-
-
public void onClick(View v)
-
{
-
try {
-
myManager.add(2, 3);
-
} catch (RemoteException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
-
}
-
});
-
-
-
}
- }