1、 计算机与通信工程学院天津理工大学计算机与通信工程学院实验报告2012 至 2013 学年 第 二 学期实验三 本地服务 Service课程名称 软件主流开发平台与工具学号 学生姓名 年级专业 教学班号 实验地点实验时间 主讲教师 辅导教师计算机与通信工程学院2实验(二) 实验名称 Service软件环境 WindowsEcllipse 本实验是比较两个整数,将较大者作为返回值:public int compare(int a, int b)if(a b) return a;else return b;2.主界面上有一个“绑定服务”及“停止服务”按钮,单击“绑定服务”绑定新实现的服务;单击“停
2、止服务” ,停止绑定。主界面另一个“比较”按钮,比较两个输入值,并将结果输出到主界面的TextView中以绑定方式使用Service,能够获取到Service对象,不仅能够启动Service,而且能够调用正在运行中的Service实现的公有方法和属性。为了使Service支持绑定,需要在Service类中重载onBind()方法,并在onBind()方法中返回Service对象。当Service被绑定时,系统会调用onBind()函数,通过onBind()函数的返回值,将Service对象返回给调用者。onBind()函数的返回值必须是符合IBinder接口,因此需要声明一个接口变量mBind
3、er,mBinder符合onBind()函数返回值的要求,因此将mBinder传递给调用者。IBinder是用于进程内部和进程间过程调用的轻量级接口,定义了与远程对象交互的抽象协议,使用时通过继承Binder的方法实现,即LocalBinder继承Binder的一个内部类,在代码中要实现getService()函数,当调用者获取到mBinder后,通过调用getService()即可获得到Service对象。步骤二、使用界面“CheckBox”控件,当控件被选中的情况下,绑定服务的行为与“步骤一”不同,具体为,创建一个新线程,该线程定时产生两个随机整数,并比较他们的大小。同时将结果利用 Han
4、dler 反馈到主界面中private Runnable backgroundWork = new Runnable() Overridepublic void run()try while(!Thread.interrupted() int input1 = (int) (100*Math.random();int input2 = (int) (100*Math.random();int result = (input1 input2) ? input1 : input2;Thread.sleep(1000);计算机与通信工程学院4CalculatorActivity.UpdateGUI(
5、input1, input2, result); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();布局的需要如下:上面有三个按钮,分别为“启动服务” , “终止服务” , “比较” ;其下是一个“多线程”的 CheckBox。下面是一个 TextView 显示的是输入一个整数 1,其右是一个 EditText,用于输入第一个整数下面是一个 TextView 显示的是输入一个整数 2,其右是一个 EditText,用于输入第二个整数下面是一个 TextView 显示的是结果。实
6、验代码:package edu.tjut.cs.calculator;import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import .Uri;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import an
7、droid.util.Log;import android.view.View;import android.widget.*;public class CalculatorActivity extends Activity /* Called when the activity is first created. */private static TextView resultTextView = null;private static int input1, input2, result;private CalculatorService calculatorService = null;
8、private static Handler handler = new Handler();public static void UpdateGUI(int firstValue, int secondValue, int res)计算机与通信工程学院5input1 = firstValue;input2 = secondValue;result = res;handler.post(Refresh);private static Runnable Refresh = new Runnable() Overridepublic void run() if(input1 = result)re
9、sultTextView.setText(String.valueOf(input1) + “ + String.valueOf(input2);elseresultTextView.setText(String.valueOf(input1) + “ b) return a;else return b;private Runnable backgroundWork = new Runnable() Overridepublic void run()try while(!Thread.interrupted() int input1 = (int) (100*Math.random();int
10、 input2 = (int) (100*Math.random();int result = (input1 input2) ? input1 : input2;Thread.sleep(1000);CalculatorActivity.UpdateGUI(input1, input2, result);计算机与通信工程学院10 catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();main.xmlCheckBoxandroid:id=“+id/modeCheckbox01“android:layout_below=“id/startServiceButton“android:layout_width=“wrap_content“