一般情况下我们使用startService(Intent service)来启动一个服务,但这种情况下无法得到Service对象的引用,通过bindService方法启动服务则可以实现此功能。下面给一个小例子演示一下:
1.调用者
1.package com.zhf.local;
2.
3.
4.import Android.app.Activity; 5.import Android.content.ComponentName; 6.import Android.content.Context; 7.import Android.content.Intent; 8.import Android.content.ServiceConnection; 9.import Android.os.Bundle; 10.import Android.os.IBinder; 11.
12./** 13. * 此例的目的就是拿到MyService的引用,从而可以引用其内部的方法和变量
14. * @author Administrator
15. *
16. */
17.public class LocalServiceActivity extends Activity { 18. /** Called when the activity is first created. */ 19. private MyService myService; 20.
21. @Override 22. public void onCreate(Bundle savedInstanceState) { 23. super.onCreate(savedInstanceState); 24. setContentView(R.layout.main);
25.
26. Intent intent = new Intent(this, MyService.class); 27. bindService(intent, connection, Context.BIND_AUTO_CREATE);
28. }
29.
30. private ServiceConnection connection = new ServiceConnection() { 31.
32. @Override 33. public void onServiceDisconnected(ComponentName name) { 34. myService = null; 35. }
36.
37. @Override 38. public void onServiceConnected(ComponentName name, IBinder service) { 39. myService = ((MyService.MyBinder) service).getService();
40. System.out.println("Service连接成功"); 41. //执行Service内部自己的方法 42. myService.excute();
43. }
44. };
45.
46. protected void onDestroy() { 47. super.onDestroy(); 48. unbindService(connection);
49. };
50.}
2.服务者
1.package com.zhf.local;
2.
3.import Android.app.Service; 4.import Android.content.Intent; 5.import Android.os.Binder; 6.import Android.os.IBinder; 7.
8.public class MyService extends Service { 9. private final IBinder binder=new MyBinder(); 10. @Override 11. public IBinder onBind(Intent intent) { 12. return binder; 13. }
14.
15. public class MyBinder extends Binder{ 16. MyService getService(){
17. return MyService.this; 18. }
19. }
20.
21. public void excute(){ 22. System.out.println("通过Binder得到Service的引用来调用Service内部的方法"); 23. }
24.
25. @Override 26. public void onDestroy() { 27. //当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用 28. super.onDestroy(); 29. }
30.
31. @Override 32. public boolean onUnbind(Intent intent) { 33. //当调用者退出(即使没有调用unbindService)或者主动停止服务时会调用 34. System.out.println("调用者退出了"); 35. return super.onUnbind(intent); 36. }
37.}
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2011-10/46074.htm