一、把输入文本的数据同步到服务的实例(如何执行服务的内部代码)

  绑定服务比启动服务更加方便高效,绑定服务中的直接方法调用比Intent作为载体传输更为快捷得多。

1、activity_main.xml

  <Button
    android:text="绑定服务"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnBindService" />
  <Button
    android:text="解除绑定服务"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnUnbindService" />
  <Button
    android:text="同步数据"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnSyncData" />

2、MainActivity.java

  private MyService.Binder binder = null;

  findViewById(R.id.btnBindService).setOnClickListener(this);
  findViewById(R.id.btnUnbindService).setOnClickListener(this);
  findViewById(R.id.btnSyncData).setOnClickListener(this);

  case R.id.btnBindService:
    bindService(new Intent(this,MyService.class),this,Context.BIND_AUTO_CREATE);
    break;
  case R.id.btnUnbindService:
    unbindService(this);
  break;
  case R.id.btnSyncData:
    if (binder != null) {
      binder.setData(editText.getText().toString());
    }
  break;

  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
    binder = (MyService.Binder)service;
  }

  @Override
  public void onServiceDisconnected(ComponentName name) {  }

3、MyService.java

  public IBinder onBind(Intent intent) {
    return new Binder();
  }

  public class Binder extends android.os.Binder{
    public void setData(String data){
      MyService.this.data = data;

    }
  }

二、内部信息呈现到外界的实例(如何侦听服务的内部状态)

1、activity_main.xml

  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tvOut"/>

2、MainActivity.java

  private TextView textView;

  textView = (TextView) findViewById(R.id.tvOut);

  public void onServiceConnected(ComponentName name, IBinder service) {
    binder = (MyService.Binder)service;
    binder.getService().setCallback(new MyService.Callback(){
      @Override
      public void onDataChange(String data) {
        //textView.setText(data);  //错误用法。程序由新创建的线程调用,不允许其他辅线程来直接获取UI线程(主线程)的资源。
        Message msg = new Message();
        Bundle b = new Bundle();
        b.putString("data",data);
        msg.setData(b);
        handler.sendMessage(msg);
      }
    });
  }

  private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      textView.setText(msg.getData().getString("data"));
    }
  };

3、MyService.java

  public class Binder extends android.os.Binder{
    public void setData(String data){
      MyService.this.data = data;
    }
    public MyService getService(){
      return MyService.this;
    }
  }

  public void onCreate() {
    super.onCreate();
    running = true;
    new Thread(){
    @Override
    public void run() {
      super.run();
      int i = 0 ;
      while(running){
        i++;
        String str = i+":"+data;
        System.out.println(str);
        if(callback != null){
          callback.onDataChange(str);
        }
         try {
            sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }.start();
  }

  private Callback callback = null;

  public void setCallback(Callback callback) {
    this.callback = callback;
  }
  public Callback getCallback() {
    return callback;
  }
  //内部通知外界:回调机制
  public static interface Callback{
    void onDataChange(String data);
  }

Android中Service通信(二)——绑定Service进行通信的更多相关文章

  1. Android中startService的使用及Service生命周期

    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法.本文仅仅探讨纯startService的使用.不 ...

  2. Android WiFiDirect 学习(二)——Service Discovery

    Service Discovery 简介 在Android WifiDirect学习(一 )中,简单介绍了如何使用WifiDirect进行搜索——连接——传输. 这样会有一个问题,那就是你会搜索到到附 ...

  3. Android中使用"running services"查看service进程内存

    从Android 2.0开始,在Settings中加入了一个新的activity("Running Services" activity),它用于显示当前运行的每个Services ...

  4. (原)android中的动画(二)

    帧动画的使用需要在xml文件中指定每一帧所对应的图片 animation-list写法如下: <?xml version="1.0" encoding="utf-8 ...

  5. Android学习笔记(八)深入分析Service启动、绑定过程

    Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是 ...

  6. Tabhost中Activity绑定Service

    在android中,一个Activity绑定一个Service组件我们一般用Context().bindService方法就能够.可是假设这个 Activity属于一个Tabhost的话就不行了,在网 ...

  7. Android中Service概述

    Service是Android中一种非常重要的组件,一般来说有两种用途:用Service执行长期执行的操作,而且与用户没有UI界面的交互:某个应用程序的Service能够被其它应用程序的组件调用以便提 ...

  8. 深入分析Service启动、绑定过程

    Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是 ...

  9. Android中如何查看内存

    文章参照自:http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-a ...

随机推荐

  1. 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra

    问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj  ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...

  2. linux 安装mysql数据库——tar.gz包解压安装法

    mysql数据库有多种安装方式,本文只介绍在Linux服务器上的tar.gz包解压安装法, 先通过mysql官网或者网络资源下载 mysql-5.7.3-m13-linux-glibc2.5-x86_ ...

  3. Ubuntu apt 常用命令

     APT(the Advanced Packaging Tool)是Ubuntu 软件包管理系统的高级界面,Ubuntu 是基于Debian的,APT由几个名字以“apt-”打头的程序组成.apt-g ...

  4. eclipse启动优化,终于不那么卡了!

    eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...

  5. float4与half4数据类型

    连续4个32位float类型数的向量 HLSL数据类型 GPU是以四维向量为基本单位来计算的.4个浮点数所组成的float4向量是GPU内置的最基本类型.使用GPU对两个float4向量进行计算,与C ...

  6. [No0000A0]批处理命令学习之:常用的特殊符号

    学习要点:1.>.>>重定向符2.| 命令管道符3.&.&&.|| 组合命令4.^ 转义字符5.% 变量引导符6."" 界定符—————— ...

  7. [No000099]软件版本命名规范

    软件版本阶段说明 Base: 此版本表示该软件仅仅是一个假页面链接,通常包括所有的功能和页面布局,但是页面中的功能都没有做完整的实现,只是做为整体网站的一个基础架构. Alpha: 此版本表示该软件在 ...

  8. [LeetCode] Department Top Three Salaries 系里前三高薪水

    The Employee table holds all employees. Every employee has an Id, and there is also a column for the ...

  9. 机器学习基础与实践(三)----数据降维之PCA

    写在前面:本来这篇应该是上周四更新,但是上周四写了一篇深度学习的反向传播法的过程,就推迟更新了.本来想参考PRML来写,但是发现里面涉及到比较多的数学知识,写出来可能不好理解,我决定还是用最通俗的方法 ...

  10. CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)

    CSS3边框: 1.CSS3圆角:border-radius  属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...