读书人

项目的小结2、使用bindService()和界面

发布时间: 2013-04-05 10:24:33 作者: rapoo

项目的总结2、使用bindService()和界面交互数据

基本步骤

1、构造查询界面:一个输入框 + 一个按钮 + 一个显示框

?

2、在Activity的onCreate()方法:添加按钮点击事件

?

3、定义一个数据查询接口IStudent的一个方法 queryStudent()

?

4、新建Service子类StudentService,在其内部定义一个内部类StundentBinder,

????? StundentBinder实现IStudent并继承Binder。 >>>>此步是重中之重,非常关键。

?

5、实现StudentService的onBind(),和具体的查询方法

?

6、在Activity中新建一个内部类,实现ServiceConnection接口,

?????? 添加未实现的方法onServiceConnected和onServiceDisconnected(暂不添加处理逻辑)

???

7、在Activity中添加IStundent的属性iStundent,在方法onServiceConnected和onServiceDisconnected进行赋值和销毁

?

8、在Activity中添加ServiceConnection的属性conn,并在onCreate()中实现bindService(),

???? conn是bindService()所必须的参数。

?

9、在点击事件处理逻辑中,调用iStundent的查询方法,从服务中获得数据。

?

10、在Activity中覆写onDestroy,调用unbindService()

===================================================================

下面我们附加上代码:

1、构造查询界面:一个输入框 + 一个按钮 + 一个显示框

   <EditText      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:id="@+id/studentno"    />       <Button      android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/button"    android:id="@+id/button"    />        <TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:id="@+id/resultView"    />

?

2、在Activity的onCreate()方法:添加按钮点击事件

resultView = (TextView) this.findViewById(R.id.resultView);studentno = (EditText) this.findViewById(R.id.studentno);Button button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new ButtonClickListener());

?

?

3、定义一个数据查询接口IStudent的一个方法 queryStudent()

public interface IStundent {        public String queryStudent(int no);}

?

?

4、新建Service子类StudentService,在其内部定义一个内部类StundentBinder,

StundentBinder实现IStudent并继承Binder。 >>>>此步是重中之重,非常关键。

?

public class StudentService extends Service{       private class StundentBinder extends Binder implements IStundent{public String queryStudent(int no) {return query(no);}       }}

?

5、实现StudentService的onBind(),和具体的查询方法

public String query(int no){String[] names = {"张飞","李小龙","赵薇"};if(no>0 && no<4){return names[no - 1];}return null;}@Overridepublic IBinder onBind(Intent intent) {return new StundentBinder();}

?

6、在Activity中新建一个内部类,实现ServiceConnection接口,

添加未实现的方法onServiceConnected和onServiceDisconnected(暂不添加处理逻辑)

private class StudentServiceConnection implements ServiceConnection{    public void onServiceConnected(ComponentName name, IBinder service) {    }    public void onServiceDisconnected(ComponentName name) {    }}

?

7、在Activity中添加IStundent的属性iStundent,在方法onServiceConnected和onServiceDisconnected进行赋值和销毁

?

private IStundent iStundent;public void onServiceConnected(ComponentName name, IBinder service) {      iStundent = (IStundent)service;}public void onServiceDisconnected(ComponentName name) {      iStundent = null;}

?

8、在Activity中添加ServiceConnection的属性conn,并在onCreate()中实现bindService(),

conn是bindService()所必须的参数。

?

private ServiceConnection conn = new StudentServiceConnection();Intent intent = new Intent(this, StudentService.class);bindService(intent, conn, BIND_AUTO_CREATE);

?

9、在点击事件处理逻辑中,调用iStundent的查询方法,从服务中获得数据。

??

public void onClick(View v) {       String no = studentno.getText().toString();       String name = iStundent.queryStudent(Integer.valueOf(no));       resultView.setText(name);}

?

?10、在Activity中覆写onDestroy,调用unbindService()

protected void onDestroy() {      unbindService(conn);      super.onDestroy();}

?

读书人网 >移动开发

热点推荐