赞
踩
Android SDK提供了Service。Service有两种类型:
本地服务(Local Service):用于应用程序内部
远程服务(Remote Sercie):用于Android系统内部的应用程序之间前者用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好
后者可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。这里不需要其他程序共享Service,因此采用本地服务。
Android中的四大组件是相互独立的,因此必须设计一个框架来实现前台界面(Activity)和后台服务(Service)的相互。Activity 和 Service的通信有以下几种方式:
当Activity通过调用bindService(Intentservice,
ServiceConnection conn,int flags),可以得到一个Service的一个对象实例,然后就可以访问Service 中的方法,完成Activity–>Service的通信;通过为Service添加监听器的方法,Service作为被观察者,Activity作为观察者当有新事件时,Service通知Activity,完成Service–→Activity的通信。这种方式适合Activity与 Service交互比较频繁的情况。
在Service中执行完耗时操作后,将结果以广播的形式发送,在 Activity中注册广播,接收到结果后更新U。因为耗时的操作结果不需要以Handler的方式发送到主线程,可以直接在子线程中发送广播,接收者始终运行在主线程中。完成Service-→>Activity的通信。同样,Activity将事件以广播的方式发送给Service,完成Activity–Service的通信。这种方式适合Activity与 Service交互不太频繁的情况。
Activity通过startService将事件发送到Service的
onStartCommand()方法,然后Service执行相应的操作,完成
Activity–Service的通信;Service通过广播将事件发送到
Activity,Activity中需注册广播接收器,完成Service-→Activity 的通信。这种方式适合Activity与 Service交互不太频繁的情况。
当Activity通过调用bindService(Intent service, ServiceConnection conn,int flags),我们可以得到一个Service的一个对象实例
详细代码实现:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。