网站大量收购闲置独家精品文档,联系QQ:2885784924

利用Messenger跨进程通信解读.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用Messenger跨进程通信 (1)、Service Service是android四大组件之一,是最顶层的应用容器,通常用于执行一些不用和用户交互的后台操作(播放歌曲)或者将本应用的某些功能提供给远程的客户端使用(跨进程通信),使用Service务必记住必须在AndroidManifest.xml文件中声明。启动一个Servcice的方法主要有两种,一种是startService,一种是bindService,通常来说前者是启动一个Service来执行一些后台任务,后者通常是进行远程通信使用。Service就和其他组件一样,同样依赖于宿主进程的主线程运行,所以如果我们需要做一些cpu密集型运算或者其他的耗时任务,就应该给Service开启一个工作线程,否则可能会导致ANR。我们要记住的两点是: ①:Service不是一个独立的进程,它和其他组件一样,默认情况下都是运行在当前的应用进程中(可以在AndroidManifest.xml文件单独指定进程)。 ②:Service并不包含独立的工作线程,同样的,它也是运行在主线程中。 Service主要有两大功能: ①:告诉系统,应用希望在后台做一些工作(即使在没有和用户交互的情况下),相应的调用方法是startService,Service一旦运行就不会停止,除非显式的调用了stopService。 ②:将本应用的一些方法暴露给远程应用,提供服务,相应的调用方法是bindService,这意味着该Servcice可以与客户端进行长链接并进行交互。 Service的生命周期: 当启动Service的时候,onCreate方法是最先被调用的,一般来将这个时候应该初始化一些全局变量,然后onStartCommand方法会被调用。如果Service是处于运行状态的,重复调用startServcice启动Service是不会起效果的,也就是onCreate只会被调用一次,但是onStartCommand会被重复调用。一旦Service运行起来了,除非明确指出要停止它,否则它将一直运行下去,除非系统回收了它所在的进程。 客户端通过调用bindService方法就可以连接Service,只要这个连接还存在,Service就会运行,并且,在Service的onBind方法里面,会给客户端返回一个IBinder对象,客户端通过IBinder对象就可以获取远程服务通道,进行远程操作。 拥有Service的进程的优先级: 默认情况下,一个只拥有Service的进程属于服务进程,它低于可见进程和前台进程,此进程往往在成为内存不足的情况下,会成为垃圾回收机制回收的候选对象。如果想要将一个只拥有Service的服务进程优先级提高,可以通过startForeground方法将其提升为前台进程。同时,我们应该知道,Service作为一个服务对象,是被客户端所依赖的,因此它 的进程的优先级必定要比客户端的高,因此,如果客户端所在进程是前台进程,那么当前进程也是前台进程。前台进程几乎不可能被回收,因为一个系统中位于前台进程的应用是很少的。 通过上述介绍,可以知道,对于使用Messenger进行远程通信来说,我们必须通过BindService方法启动远程服务,同时,Service的onBind方法会返回一个可进行通信的IBinder对象,通过它就可以和远程对象进行通信。 (2)、ServiceConnnection ServiceConnection是用来管理连接远程Service的状态的,ServiceConnection是bindService的第二个参数,通过实现它,就可以在客户端中知道是否连接上了远程对象。ServiceConnection主要有两个方法,如下: [java] view plain copy print?在CODE上查看代码片派生到我的代码片 public interface ServiceConnection { public void onServiceConnected(ComponentName name, IBinder service); public void onServiceDisconnected(ComponentName name); } ①:onServiceConnected: 当客户端与远程Service连接上时,此方法会回调,并且会获取到一个用于进行远程交流的IBinder对象Service。 ②:onServiceDisconnected: 当客户端与远程Service断开连接时回调,name表示的是远程Service的具体名称。 (3)、Message Messa

您可能关注的文档

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档