如何在Activity中调用服务服务中的方法呢,下面我们用一个例子简单的说一下
需求:服务中有一个方法,返回值为String 内容为“张三”,现在我们通过调用服务中的方法把“张三”显示在主Activity上。
新建一个服务类MyService,继承Service
package cn.cbd.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class MyService extends Service { @Override public void onCreate() { super.onCreate(); } @Override public IBinder onBind(Intent intent) { return new MyBinder(); } @Override public void onDestroy() { super.onDestroy(); } public class MyBinder extends Binder { public String getname() { return getName(); } } /** * 在服务中自定义一个方法,我们要在activity中调用这个方法 * * @return */ public String getName() { return "张三"; } }
在上面我们看到,getName()这个方法是我们在Service中定义的,现在我们要在主Activity中调用这个方法。怎么调用呢,上面MyService中有一个onBind(Intent intent)方法 返回值类型为IBinder activity和service就是通过这个方法来进行通信。 所以呢 我们为了方便起见,就自定义了一个类MyBinder继承Binder ,在MyBinder类中定义一个方法getname(),返回getName()的值。
Service也是android四大组件之一,所以呢,不要忘记在清单文件中对其进行配置
下面我们看Activity这一面:
package cn.cbd.service; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class ServiceTestActivity extends Activity { private Button btn_bindService; private TextView tv_show; private MyServiceConnection conn; private MyService.MyBinder myBinder; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn_bindService = (Button) findViewById(R.id.btn_bindService); tv_show = (TextView) findViewById(R.id.tv_show); btn_bindService.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 开启服务 Intent service = new Intent(ServiceTestActivity.this, MyService.class); conn = new MyServiceConnection(); // startService(service)只能单纯的开启一个服务,要想调用服务服务中的方法,必须用bindService和unbindService // startService(service); bindService(service, conn, Context.BIND_AUTO_CREATE); } }); } /** * 自定义一个类,实现ServiceConnection接口,并重写其两个方法 * @author Administrator * */ public class MyServiceConnection implements ServiceConnection { //当绑定服务成功的时候会调用此方法 public void onServiceConnected(ComponentName name, IBinder service) { //得到MyService.MyBinder对象,我们通过这个对象来操作服务中的方法 myBinder = (MyService.MyBinder) service; //调用服务中的getname()方法并把值设置到TextView上进行显示 tv_show.setText(myBinder.getname()); } public void onServiceDisconnected(ComponentName name) { } } @Override protected void onDestroy() { // 在程序销毁的时候要对服务解除绑定 unbindService(conn); super.onDestroy(); } }
效果图:
从运行结果上我们可以看出,我们已经通过调用服务中的getName()方法把“张三”显示出来了。
博文下面有本程序的项目包,各位可以下载下来,解压后参考其中的代码。