zoukankan      html  css  js  c++  java
  • Android之Activity与Service通信

    一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现。

         当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用。比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。

    代码如下:

    /*************************Service代码****************************************/
    public class LocalService extends Service {
    private final IBinder binder = new LocalBinder();

    public class LocalBinder extends Binder {
    LocalService getService() {
    return LocalService.this;
    }
    }

    public IBinder onBind(Intent intent) {
    return binder;
    }
    }

    /*****************************Activity代码*************************************/
    public class BindingActivity extends Activity {
    LocalService localService;

    private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className,IBinder localBinder) {
    localService = (LocalBinder) localBinder.getService();
    }
    public void onServiceDisconnected(ComponentName arg0) {
    localService = null;
    }
    };

    protected void onStart() {
    super.onStart();

    Intent intent = new Intent(this, LocalService.class);
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    }

    protected void onStop() {
    super.onStop();
    unbindService(mConnection);
    }

    public void printRandomNumber{
    int num = localService.getRandomNumber();
    System.out.println(num);
    }
    }

    代码解释:

    使用使用context.bindService()启动Service会经历:
    context.bindService()->onCreate()->onBind()->Service running
    onUnbind() -> onDestroy() ->Service stop

    Activity能进行绑定得益于Service的接口onBind()。ServiceActivity的连接可以用ServiceConnection来实现,需要实现一个新的ServiceConnection,重写onServiceConnectedonServiceDisconnected方法。执行绑定,调用bindService方法,传入一个选择了要绑定的ServiceIntent(显式或隐式)和一个你实现了的ServiceConnection实例。一旦连接建立,你就能通Service的接口onBind()得到serviceBinder实例进而得到Service的实例引用。一旦Service对象找到,就能得到它的公共方法和属性。但这种方式,一定要在同一个进程和同一个Application里。

     --------------------------------------------------------------------

    PS: 欢迎关注公众号"Devin说",会不定期更新Java相关技术知识。

    --------------------------------------------------------------------

     

  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/devinzhang/p/2308980.html
Copyright © 2011-2022 走看看