Android 绑定远程Service(此Service开启在另外一个进程中)
2013-04-11 15:45
447 查看
服务客户端(MainActivity):
远程服务(RemoteService):
IRemoteService.aidl:
本文出自 “让梦冬眠” 博客,谢绝转载!
package com.example.remoteservicebind; 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.Handler; import android.os.IBinder; import android.os.Message; import android.os.Process; import android.os.RemoteException; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "BindRemoteService"; private IRemoteService mRemoteService = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bindRemoteService = (Button) findViewById(R.id.bind_remote_service); bindRemoteService.setOnClickListener(mBindListener); Button unBindRemoteService = (Button) findViewById(R.id.unbind_remote_service); unBindRemoteService.setOnClickListener(mUnBindListener); Button remoteServiceMethod = (Button) findViewById(R.id.remote_service_method); remoteServiceMethod.setOnClickListener(mRemoteServiceMethodListener); Button killRemoteServiceProcess = (Button) findViewById(R.id.kill_remote_service_process); killRemoteServiceProcess.setOnClickListener(mKillRemoteServiceProcessListener); } private final OnClickListener mBindListener = new OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "Main Activity ----> onClick BindRemoteService"); bindService(new Intent(IRemoteService.class.getName()), mRemoteServiceConnection, Context.BIND_AUTO_CREATE); } }; private final OnClickListener mUnBindListener = new OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "Main Activity ----> onClick unBindService"); unbindService(mRemoteServiceConnection); mRemoteService = null; } }; private final OnClickListener mRemoteServiceMethodListener = new OnClickListener() { @Override public void onClick(View v) { if (mRemoteService == null) { Toast.makeText(MainActivity.this, "没有绑定到服务", Toast.LENGTH_LONG).show(); } else { try { Toast.makeText(MainActivity.this, mRemoteService.getName(), Toast.LENGTH_LONG).show(); } catch (RemoteException e) { } } } }; private final OnClickListener mKillRemoteServiceProcessListener = new OnClickListener() { @Override public void onClick(View v) { int pid; try { pid = mRemoteService.getPid(); Process.killProcess(pid); } catch (RemoteException e) { e.printStackTrace(); } } }; private final ServiceConnection mRemoteServiceConnection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { mRemoteService = IRemoteService.Stub.asInterface(service); } }; private final Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
远程服务(RemoteService):
package com.example.remoteservicebind; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; import android.util.Log; /** * 远程服务 开启在另外一个进程中 * @author Simon Xu * * 2013-4-11上午11:12:44 */ public class RemoteService extends Service { private static final String TAG = "BindRemoteService"; private static final int REPORT_MSG = 1; // private final Handler mHandler = new Handler(){ // // @Override // public void handleMessage(Message msg) { // // } // // }; private final IRemoteService.Stub mRemoteServiceBinder = new IRemoteService.Stub() { @Override public int getPid(){ Log.i(TAG, "Remote Service ----> IRemoteService & getPid()"); return Process.myPid(); } @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } @Override public String getName(){ Log.i(TAG, "Remote Service ----> IRemoteService & getName()"); return "RemoteService diaomao......"; } }; @Override public IBinder onBind(Intent intent) { Log.i(TAG, "Remote Service ----> onBind"); if (IRemoteService.class.getName().equals(intent.getAction())) { return mRemoteServiceBinder; } else { return null; } } @Override public void onCreate() { Log.i(TAG, "Remote Service ----> onCreate"); // this.mHandler.sendEmptyMessage(REPORT_MSG); } @Override public void onDestroy() { Log.i(TAG, "Remote Service ----> onDestroy"); // this.mHandler.removeMessages(REPORT_MSG); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "Remote Service ----> onStartCommand"); return super.onStartCommand(intent, flags, startId); } }
IRemoteService.aidl:
package com.example.remoteservicebind; interface IRemoteService{ int getPid(); String getName(); void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); }
本文出自 “让梦冬眠” 博客,谢绝转载!
相关文章推荐
- Android Service(服务)绑定远程服务一个小demo
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
- AndroidStudio通过AIDL开启、绑定远程Service
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
- 18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用,综合服务案例,编写一个应用程序调用远程支付宝远程服务场景
- Android中bindService的细节之一:从进程的角度分析绑定Service的流程【Service所在进程首次启动】
- 一个简单的demo学习Android远程Service(AIDL的使用)
- Android学习之远程绑定调用service
- Android的服务(Service)(三)Service客户端的绑定与跨进程
- Android的Activity启动长时间的操作开启一个Service比开启一个线程好
- 一个简单的demo学习Android远程Service(AIDL的使用)
- android调用远程service(一个apk调用另一个apk的service)
- android 同一个service启动之后 能不能被绑定bind
- Android 开启远程Service对Application的影响
- Android - 绑定服务调用服务里面的方法,start/bind开启服务的比较,混合方式开启服务,本地服务,远程服务,系统服务,录音API
- android 开启service和绑定service
- Windows 编程中用Service开启一个外部进程的两种语言实现方式(C++,C#)。
- Android Service组件在进程内绑定(bindService)过程
- Android的服务(Service)(三)Service客户端的绑定与跨进程