绑定服务&调用服务里面的方法

来源:互联网 发布:个人养老保险算法 编辑:程序博客网 时间:2024/05/01 04:29

一个继承Service的TestService类,里面有一个changeTest(String name)方法,要在activity中调用这个方法改变服务中的一些状态,进行一下设计。


public class TestService extends Service {//服务被成功绑定的时候会调用该方法@Overridepublic IBinder onBind(Intent arg0) {System.out.println("服务被成功的绑定了");//返回自定义的代理人//步骤2.服务成功绑定的时候,调用onBind方法,返回一个IBinder对象return new MyBinder();}private class MyBinder extends Binder implements IService{public void bindChange(String name){changeTest(name);}}public void changeTest(String name){System.out.println("这是服务里面的方法"+name);}@Overridepublic void onCreate() {super.onCreate();System.out.println("服务被创建");}@Overridepublic void onDestroy() {super.onDestroy();System.out.println("服务被销毁");}}

public class MainActivity extends Activity {//步骤4:在activity里面得到服务Ibinder对象的引用private IService myBinder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void startService(View view){Intent intent = new Intent(this, TestService.class);startService(intent);}public void stopService(View view){Intent intent = new Intent(this, TestService.class);stopService(intent);}/** * 采用绑定的方式开启服务,在TestService中会自动调用onBind方法,该方法返回一个IBinder对象 * 在MainActivity里面实现onServiceConnected()方法,传递进来IBinder参数,这样 * IBinder对象就充当service和activity之间的代理人的角色 * @param view */public void bindService(View view){//intent激活服务的意图//conn 代理人,中间人对象用来跟服务建立联系,不能为空Intent intent = new Intent(this, TestService.class);//步骤1.采用绑定服务的方法开启服务bindService(intent, new MyConn(), 0);}private class MyConn implements ServiceConnection{//Called when a connection to the Service has been established@Overridepublic void onServiceConnected(ComponentName arg0, IBinder service) {System.out.println("service的代理人被返回回来了");//步骤3:服务返回的IBinder对象会传递个MyConn的回调方法onServiceConnected方法myBinder = (IService)service;}//Called when a connection to the Service has been lost//只有在程序异常终止的时候会自动调用@Overridepublic void onServiceDisconnected(ComponentName arg0) {// TODO Auto-generated method stub}}//步骤5:利用IBinder对象间接的调用了服务里面的方法public void changeService(View view){myBinder.bindChange("仁者无敌");}}

public interface IService {public void bindChange(String name);}
服务里面的MyBinder类需受到保护,不可以随便让外部代码访问,所以需为private,但是activity中要拿到MyBinder类,故此处定义一个接口IService,MyBinder类实现了这个接口,在activity中

private IService myBinder;
myBinder = (IService)service;
通过接口拿到MyBinder的对象,这样通过这个对象调用的bindChange方法就是实现IService接口的MyBinder类里面实现的方法。

原创粉丝点击