ZKX's LAB

android 进程 服务 android 推送服务为什么要独立进程

2021-04-28知识3

android 推送服务为什么要独立进程 “进程”?你应该是指在android中的“线程”吧,主线程是UI线程,不能阻塞。所以不建议放到主线程。既然不是主线程,那就要另启独立线程咯。如果不是,请勿喷~

android系统中,“进程”和“服务”哪个对系统运行内存消耗比较大? 到底进程还是服务消耗内存大,取决于具体的程序,也取决于程序的运行状态安卓中的进程是前台程序,也就是通常看到的软件界面和软件本身,进程不能在后台执行,当一个进程转入后台时,自动休眠,内存占用量很低安卓中的服务是后台程序,提供提供对应用程序处于后台时继续运行的条件,因为安卓系统规定进程不允许后台运行,转入后台的进程都一律进入休眠模式,不再占用CPU,所以对于一些希望后台还能继续执行的程序,就会带有服务所有程序都对应一个或多个进程,但不是所有程序都有服务,服务只针对那些需要后台继续运行的程序提供必要的环境,例如杀毒软件、通讯软件、流量监控软件等等服务一般来说内存占用都是恒定的,波动不会很大,而进程则不一定,例如一些安卓网络游戏的进程内存占用可以达到上百M,转入休眠后可能只有几M甚至几百K,但它们的服务程序可能只消耗几M的内存,而对于杀毒软件这类需要强大后台支撑的,其进程可能只占用几M内存,而后台服务却可能占用几十M之多因此进程和服务谁占用内存大没有一个固定标准,与具体程序有关PS:纯手打,如有问题欢迎追问

关于Android进程间通信 先来解释一下AIDL,这东西其实算是提供了一种自定义客户端和服务器之间RPC通信协议的通用方法,并由Android的编译器自动生成这个协议的接口实现程序,包括客户端的interface和服务器端的stub。其实你的需求用AIDL和socket都可以实现,AIDL比socket强的一点就是,用它定义了协议之后,客户端和服务器程序直接把aidl文件拿过去就可以自动生成实现这个协议的部分框架代码,而不需要自己重头写,而如果你用socket来做这个,那么可能客户端和服务器端分别需要写一些代码来把函数调用和socket通信之间做转换,这不光带来工作量的增加,也增加了因为客户端和服务器端代码不匹配造成的bug风险。当然,反过来说,socket也有灵活的优势,比如你的客户端和服务器可以不光是Android程序,也可以是其他支持同一协议的比如linux程序。然后说服务器程序的启动,其实不管用AIDL还是socket,跟服务器启动都是两码事,一般如果用service组件实现服务器,启动它是使用Context.startService方法,service组件自己提供了避免重复启动的机制,与AIDL和socket无关,service启动之后,如果是socket方式则由service程序开socket端口(但这个端口需要由其他方法通知客户端,因为想用的端口有。

随机阅读

qrcode
访问手机版