android socket接收事件为什么没有监听事件,要用死循环呢 20
有懂谷歌设计的,说一下看法呗。 展开
socket是Java API(编程文档接口),为了直接使用Socekt服务,谷歌直接把Java的Socket模块照搬过来的
Android 的 onClikcListener onTouchEvent 等是Android API(编程文档接口)
2.设计目的
编程接口全都是根据需求设定的,比如Google事先考虑开发者有使用监听事件的需求,才预定义了onClickListener onItemListener这些接口,并且将这些底层实现,封装到了c和C++层,开发者只需要直接使用Google事先为我们准备好的接口即可。
Socket ,首先Socket并不是Google事先设计好的,Socke中文名称作套接字,你百度搜套接字编程,可以认识到Socket开发是专门的编程技术,而Socket本身又是网络通信协议的基础设施,Socket的诞生历史,高于Android,甚至高于Java,Socekt是计算机提供进程通信能力的编程接口,确切的说,它甚至可以提供不同主机间不同进程的通信能力,(包括同一主机里不同进程的通信能力)
主机?端系统?网络协议?运输层?传输层?套接字?端口?
我说的这些专业名词,也许你一时半会并不能理解
值得庆幸的是,当你了解到这里,你起码能想明白,为什么有的人说,Android 程序,也可以做服务器了,因为Socket 提供了其他端系统访问Android程序的能力,能被请求访问的程序,可以称作服务端。
想深入了解Socket的设计原理、设计本意,需要深厚的计算机网络知识,在这里我建议你阅读《计算机网络-自顶向下方法》阅读前三章,也许你对网络编程会有更深的理解。
总结来说:
Android的Listener系列监听事件,其实只是响应用户I/O操作而已,是人与硬件设备的通信,安卓系统提供维持监听事件的能力,所以你能根据某些事件作出响应
Socket的功能,是提供进程通信的能力,安卓系统并不能直接控制Socket的生命周期,它第一层设计是Java代码,并不是Google自己研发的,第二层、第三层已经直接深入到运输层协议、计算机系统层原理了,Google为了省事,直接照搬Java API ,无可厚非。
像按钮可以有onClikcListener,当被按下时触发自己写的一些代码。
socket有“on接收到数据Listener”吗?我没找到。网上的人都是用的死循环,不停的读io流,读到了,就是接收到了。没有读到,就继续循环读。
我想问的是,不停的循环读,费cpu的电量吗?如何优化一下思路呢?
vb的socket有DataArrival事件。当收到数据之后触发这个事件。不触发事件的时候,基本不动cpu。