本地服务-服务于访问者在同一进程

来源:互联网 发布:三菱fx编程代码 编辑:程序博客网 时间:2024/06/05 01:15

之前通过startService() && stopService()启动关闭服务,此方法适用于访问者与服务没有交互的情况下

bindService() && unbindService() 启动关闭服务,适用于服务与访问者之间调用方法或传递参数

Context.bindService()启动服务,在服务未被创建时,先调用服务onCreate()方法,接着调用onBind()方法 这时访问者与服务绑定在一起

如果访问者与服务进行通信,onBind()方法必须返回Ibind对象,

unbindService()解除绑定-该方法会导致系统调用服务的onUnbind()----> onDestroy()方法


项目需求-根据学号查询学生名称


StuMainActivity.java

package com.example.studentquery;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class StuMainActivity extends Activity {private Button but;private EditText editText;private TextView tex2;private ServiceConnection conn = new StuSerConnection();private IStuBinder iStuBinder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_stu_main);but = (Button) findViewById(R.id.button1);editText = (EditText) findViewById(R.id.editText1);tex2 = (TextView) findViewById(R.id.textView2);but.setOnClickListener(new ButListener());//bind serivceIntent service = new Intent(this,StuService.class);bindService(service, conn, BIND_AUTO_CREATE);}private class StuSerConnection  implements ServiceConnection{public void onServiceConnected(ComponentName name, IBinder service) {iStuBinder = (IStuBinder)service;}public void onServiceDisconnected(ComponentName name) {iStuBinder = null;}}//activity 实例被摧毁时解除服务绑定@Overrideprotected void onDestroy() {unbindService(conn);super.onDestroy();}private class ButListener implements OnClickListener{@Overridepublic void onClick(View v) {String number = editText.getText().toString();//1.根据学号通过服务访问数据库中对应的代码String StuName = iStuBinder.QueryStu(Integer.valueOf(number));tex2.setText(StuName);}}}
StuService.java  服务类

package com.example.studentquery;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class StuService extends Service{private String[] names = {"aa","bb","cc","dd"};private IBinder ibinder = new StuBinder();public String query(int number){ if(number>0 && number<names.length){ return names[number-1]; }return null;}//返回給访问者绑定的IBinder@Overridepublic IBinder onBind(Intent arg0) {return ibinder;}//构造一个class 继承 Binder,继承 IStuBinder 并实现接口private class StuBinder extends Binder implements IStuBinder{public String QueryStu(int number) {//通过ibinder 对象掉用服务中方法return query(number);}}}
<span style="color:#cc0000;">IStuBinder.java<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">  接口服务</span></span>
package com.example.studentquery;public interface IStuBinder {public String QueryStu(int number);}



0 0
原创粉丝点击