700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android service Binder用法

Android service Binder用法

时间:2022-05-17 05:10:47

相关推荐

Android service Binder用法

1.与本地service通信

//在服务里面新建一个内部类LocalBinder//LocalBinder新增了两个自己的方法binderFun1(),binderFun2()//LocalBinder的getService()返回当前服务的this对象/***在onBinder方法中返回LocalBinder对象,回LocalBinder对象包含了service的句柄,*客户端通过句柄就可以调用servcie的公共方法funLocalService()了.*/public class LocalService extends Service { @Override public IBinder onBind(Intent intent) { return new LocalBinder(); }public void funLocalService(){ Toast.makeText(this.getApplicationContext(), "fun of LocalService!", Toast.LENGTH_SHORT).show(); }public class LocalBinder extends Binder { public void binderFun1(){}public void binderFun2(){}LocalService getService() { return LocalService .this; }}}

public class ClientActivity extends Activity {private static final String TAG = "ClientActivity ";private ServiceConnection mServiceConnection;

private LocalService.LocalBinder mLocalBinder;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mServiceConnection= new ServiceConnection(){@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {

//调用LocalBinder自己的方法mLocalBinder = (LocalService.LocalBinder)service;

mLocalBinder.binderFun1();

mLocalBinder.binderFun1();

//client得到服务LocalService的句柄,便可以调用服务里面声明的public方法funLocalService()LocalService mLocalService= ((LocalBinder)service).getService();mLocalService.funLocalService();

Log.d(TAG, "LocalService is connected");}@Overridepublic void onServiceDisconnected(ComponentName name) {Log.d(TAG, "LocalService is disconnected");}};}@Overrideprotected void onStart() {super.onStart();Log.d(TAG, this.getApplicationContext().getPackageCodePath());Intent bindIntent = new Intent(this.getApplicationContext(),LocalService.class);

//绑定服务this.bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);}@Overrideprotected void onStop() {super.onStop();

//解除绑定服务this.unbindService(mServiceConnection);}}

2.与另外一个进程中的service进行通信的问题(跨进程通信!)

参考/lzjsky/p/4938256.html

AndroidManifest.xml文件中配置service

如何将servcie运行在另外一个进程呢?在manifest 里面配置个属性就行了。

android:process=":remote" , 代表这个service运行在同一个应用程序的不同进程中。

android:process

这个属性用于设定服务所运行的进程名称。通常,应用程序的所有组件都运行在给应用程序创建的进程中,进程名与应用程序的包名相同。<application>元素的process属性能够给应用程序的所有组件设置一个不同的默认名称。但是每个组件自己的process属性都能够覆盖这个默认值,这样允许把应用程序分离到不同的多个进程中。

如果这个属性值用“:”开头,则在需要的时候系统会创建一个新的,应用程序私有的进程,并且该服务也会运行在这个进程中。如果这个属性值用小写字母开头,那该服务就会运行在以这个属性值命名的全局进程中,它提供了使其工作的权限。这样就允许不同的应用程序组件来共享这个进程,从而降低资源的使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。