andorid,绑定服务,调用服务的方法

来源:互联网 发布:海信电视怎么安装软件 编辑:程序博客网 时间:2024/04/30 17:29

调用服务类方法的流程。

1,绑定服务,绑定成功输出信息。

2: 服务在成功绑定的时候  会调用onbind方法 返回一个ibinder对象.

3: 服务返回的ibinder对象 会被传递给MyConn implements ServiceConnection的回调方法。

4: 在activity里面得到服务 ibinder对象的引用.

5: 利用ibinder 对象 间接的调用了服务里面的方法

public class MainActivity extends Activity {//步骤4: 在activity里面得到服务 ibinder对象的引用.private IService myBinder;private MyConn conn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/** * 开启服务 *  * @param view */public void start(View view) {Intent intent = new Intent(this, CungeService.class);// 采用api 创建 服务 ,服务对象是被系统(框架 )new 出来startService(intent);}/** * 停止服务 */public void stop(View view) {Intent intent = new Intent(this, CungeService.class);stopService(intent);}public void bind(View view){Intent intent = new Intent(this, CungeService.class);//intent 激活服务的意图// conn 代理人 中间人对象 用来跟服务建立联系 不能为空// BIND_AUTO_CREATE 在绑定服务的时候 如果服务不存在 就自动的创建//步骤1: 采用绑定服务的方式 开启服务conn = new MyConn();bindService(intent,conn , BIND_AUTO_CREATE);}//接触绑定服务的方法public void unbind(View view){unbindService(conn);}@Overrideprotected void onDestroy() {try{unbindService(conn);}catch (Exception e) {}super.onDestroy();}private class MyConn implements ServiceConnection{// 在服务被成功绑定的时候 调用的方法@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {System.out.println("春哥把代理人返回回来了...");//步骤3: 服务返回的ibinder对象 会被传递给 MyConn 的回调方法System.out.println(service);myBinder  = (IService) service;}// 在服务失去绑定的时候 调用的方法 只有程序异常 终止,@Overridepublic void onServiceDisconnected(ComponentName name) {}}/** * 调用服务里面的方法 ,换首歌 */public void change(View view) {// 由于系统框架在创建服务的时候 会创建与之对应的上下文,// 下面的代码 是直接new对象 .// CungeService service = new CungeService();// service.changeSing("月亮之上");//步骤5: 利用ibinder 对象 间接的调用了服务里面的方法myBinder.callChangeSing("月亮之上");}}

创建一个服务类,含有一个准备被外界调用的方法。

MyBinder类,用于调用服务类的方法

/** * 在后台长期运行的组件 唱歌 * @author Administrator * */public class CungeService extends Service {@Overridepublic IBinder onBind(Intent intent) {System.out.println(" onBind 春哥服务被成功的绑定了....");//步骤2: 服务在成功绑定的时候  会调用onbind方法 返回一个ibinder对象.//返回自定义的代理人对象MyBinder mybinder = new MyBinder();System.out.println(mybinder.toString());return mybinder;}private class MyBinder extends Binder implements IService{//间接的利用代理人 调用了春哥的方法public void callChangeSing(String name){changeSing(name);}public void peiCungeWatchTV(){}public void peiCungeCountMoney(){}}@Overridepublic void onCreate() {super.onCreate();System.out.println("onCreate 服务开始了 ,春哥 开始唱歌");}/** * 更改唱的歌曲 * @param singName */public  void changeSing(String singName){Toast.makeText(getApplicationContext(), "开始唱"+singName, 0).show();}@Overridepublic boolean onUnbind(Intent intent) {System.out.println("onunbind");return super.onUnbind(intent);}@Overridepublic void onDestroy() {super.onDestroy();System.out.println("onDestroy 服务销毁了 ,春哥停止唱歌");}}
MyBinder 要实现这个接口。在activity里面得到服务 ibinder对象的引用时,用接口声明就行了.

//春哥代理人的接口public interface IService { public void callChangeSing(String name);}

清单中加入

<service android:name=".CungeService"></service>

0 0