1、首先Service、Broadcast Receiver、Content Provider都是运行在UI线程,或者说主线程中的,就是启动一个Activity时开始运行的那个进程。
1、} 这里的obj实际上是广播监听函数public void onReceive(String type, Object obj)中的第二个参数。当时看到这个函数的时候,一直不明白第二个参数的作用,后来才发现,原来还可以通过它来得到intent。
2、onReceive(...)是BroadcastReceiver的方法,当系统接收到intent broadcast时,就会被调用到。
3、Kotlin支持函数作为参数传递,无需构建对象来包装函数。
还有,如果是无线局域网或广域网用异步套接字的话会出现数据不正常,因为网速的关系,所以*用CSocket阻赛套接字,用多线程处理。
如果套接字是SOCK_STREAM类型的,并且远端接点已经正常地关闭连接,Receive会立即返回,接收的数据当然是0字节。如果连接被重置了,Receive将会异常返回,错误代码为WSAECONNRESET。
可能是tomcat内存不足,或某些线程堵塞导致程序运行效率越来越底下,重新启动tomcat会自动释放这些东西,自然会正常运行。当你程序运行一段时间以后可以检查一下内存,cpu等使用情况。
它是如何又把CAsyncSocket变成同步的,而且还能响应同样的Socket事件呢? 其实很简单,CSocket在Connect()返回WSAEWOULDBLOCK错误时,不是在OnConnect(),OnReceive()这些事件终端函数里去等待。
在有选项IEvent为FD_READ时,如果有数据到来,程序自动调用OnReceive(int nErrorCode),所以也可以通过重载OnReceive(),在其中使用ReceiveFrom()来接收数据,并添加一些用户定义的对数据的操作。