• 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. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mServiceConnection= new ServiceConnection(){ @Override public 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"); } @Override
    public void onServiceDisconnected(ComponentName name) { Log.d(TAG, "LocalService is disconnected"); } }; } @Override protected 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); } @Override protected void onStop() { super.onStop();
    //解除绑定服务
    this.unbindService(mServiceConnection); } }
    
    
    
     

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

    参考https://www.cnblogs.com/lzjsky/p/4938256.html

    AndroidManifest.xml文件中配置service

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

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

    android:process

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

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

  • 相关阅读:
    jquery ajax下拉框省市联动效果实现代码
    冒泡排序算法
    Ext.form.ComboBox调用store.filterBy失效问题
    高性能建站之前端优化篇
    不用任何插件实现 WordPress 的彩色标签云
    Javascript 实现select的美化
    RabbitMQ安装与测试
    Select 下拉列表选择插件 (包含下拉选择图片,下拉grid等)
    Javascript 通过cookie记录浏览记录
    ActiveMQ安装与测试
  • 原文地址:https://www.cnblogs.com/sunupo/p/10313872.html
Copyright © 2020-2023  润新知