一:思想

在Android中,Activity的类可以看成是“可见”的逻辑处理类,拥有用户界面与用户进行互动操作,但如果这个Acitvity失去了“焦点”,则它的逻辑处理随即停止,那样如果我们需要进行一些后台类的操作,既与用户当前操作的焦点无关,可以在背后一直运行,为相应的应用程序提供服务,Android中这种逻辑处理类称为Service。一般继承自Service类。

Service类是没有用户界面,但只作为一种后台逻辑处理,为表层Activity提供相应的服务操作,所以Service类处理后的数据要交回给Activity,Activity也要获得Service的服务逻辑,即两者之间要进行交互。而这个交互过程如下:

1、Service类中要创建一个内部类。继承自Binder,因为在Service这个父类中,Onbind方法返回一个IBinder接口的返回值,而Binder是IBinder接口的一个实现。

2、继承自IBinder类的内部类,只需要实现一个返回Service自身对象的功能的方法即可。

3、在Activity中通过bindService方法与对应的Service进行绑定,一旦执行这个方法,则系统自动调用Service类中的onbind方法,这里就会返回一个IBinder类返回值,也就是Service创建的内部类对象。

4、在Activity中创建一个ServiceConnection对象,作为参数传入上面的bindService方法中。这里自动调用Onbind方法就会将Service返回的IBinder类的返回值传入到ServiceConnection中的onServiceConnected方法的参数中。这个方法只需要实现IBinder返回值中的返回Service自身的方法赋值到Activity的一个参数即可。

5、要在AndroidManifest.xml文件中注册Service。

6、注意Service的真正启动其实是在调用Service的线程结束后,例如在Activity中的OnCreate方法中执行startService或者bindService等操作,Service也只在OnCreate方法完成后才真正开始执行。

二:例子代码:

1、Service类

ServiceTestpublicclass ServiceTest extends Service {private MyBinder binder = new MyBinder();@Overridepublic IBinder onBind(Intent intent) {Log.i("demo", "onbind");return binder;}class MyBinder extends Binder{public ServiceTest getService(){return ServiceTest.this;}}}

2、Activity类

 ServiceTestpublicclass BlogTestActivity extends Activity {/** Called when the activity is first created. */private ServiceTest Myservice = null;@Overridepublicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Intent bindService = new Intent(BlogTestActivity.this,ServiceTest.class);startService(bindService);this.bindService(bindService, connection, Context.BIND_AUTO_CREATE);}ServiceConnection connection = new ServiceConnection() {@Overridepublicvoid onServiceDisconnected(ComponentName name) {Myservice = null;}@Overridepublicvoid onServiceConnected(ComponentName name, IBinder service) {Log.i("demo", "连接了Server!");Myservice = ((ServiceTest.MyBinder) service).getService();}};}

转自:http://blog.csdn.net/hahashui123/article/details/7341950

更多相关文章

  1. 解決在 Android(安卓)中使用 Bitmap 造成 Out of memory 的方法~
  2. Android目前流行三方数据库ORM分析及对比
  3. Android(安卓)Studio 中超级常用的快捷键使用,提高代码编写效率。
  4. Android(安卓)JNI处理图片实现黑白滤镜的方法
  5. Android有效的治疗方法Bitmap,减少内存
  6. Android中基类BaseActivity的设计与实现
  7. android使用Vitamio实现视频播放大小屏流畅切换
  8. 白话Android自定义ListView实现
  9. android手机开发课小结

随机推荐

  1. Android中回调接口的使用
  2. android——android中测试框架AndroidTes
  3. 简单控件的UI界面设计
  4. 修复android获取ip地址失败 Fix Obtainin
  5. 【转】Android 字符串的加密和解密
  6. Android获取activity的所有子view(使用到
  7. android 中 webview 怎么用 localStorage
  8. Android:ViewPager制作幻灯片
  9. cocos2dx android 真机调试时Logcat不显
  10. google 开发者自定义view的系列(创建view,