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();
- }
- }
- });
-
- }
- }
http://blog.chinaunix.net/uid-25677340-id-2854775.html