tcp socket 使用源生代码监听成功后,阻塞了线程。
主线程完全卡死了。
有什么办法可以多线程监听啊。
代码如下
function initSocket(host,port){
var Socket = plus.android.importClass("java.net.Socket");
var PrintWriter = plus.android.importClass("java.io.PrintWriter");
var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");
var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
var BufferedReader = plus.android.importClass("java.io.BufferedReader");
var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");
//
var Thread = plus.android.importClass("java.lang.Thread");
var Runnable = plus.android.importClass("java.lang.Runnable");
socket = new Socket(host, port);
outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
bufferWriter = new BufferedWriter(outputStreamWriter);
out = new PrintWriter(bufferWriter, true);
inputStreamReader = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(inputStreamReader);
console.log("Initilised");
}
function listenSocket(){
var msg = br.readLine();
while(true){
if(msg != null){
console.log(msg);
//receiveMsg(msg);
}
msg = br.readLine();
}
}
7 个回复
chender - 与人为善
启一个线程来做吧,你这个不是在新启的线程里做的监听,当然会阻塞
hyhezhen
请问
如果用原生写底层插件,用多线程实现 SOCKET 发送和读取(持续通讯)。上层JS调用
假定JS 可以启动发送线程,那么接收线程,每次检测到传入数据后怎样传送到JS层?
谢谢
chender
通过监听吧
2015-08-24 09:32
hyhezhen
实验过了,插件底层函数里
pWebview.evalJS("demo()");
executeScript 的效果好像一样
可以调用网页上的JS函数(比如网页JS代码已有demo函数)
http://www.dcloud.io/docs/sdk/android/
这个要是有更多范例就好了
比如 addJsInterface 等可能做些什么功能
另外底层新开线程,上层调用不会阻塞,已经验证
小郭哥
能不能传个demo上来啊
2016-01-16 15:19
y***@126.com - 技术交流
兄台是怎么新建的线程啊,我的主一直阻塞呢
hyhezhen
细节不记得了 拿参考的SDK代码来改
FYC - 80后IT男
学习一下
1***@126.com
异步就好了,看这个https://segmentfault.com/a/1190000016852548
connect(ip, port) {
let promise = new Promise()
promise.then(
function (data) {
this.pos = new PosMachine(ip, parseInt(port))
this.writer = this.pos.getPosHandle()
}
).catch(
function (e) {
this.pos = null
this.writer = null
Toast('链接打印机失败,请检查')
console.log('链接打印机失败:' + e)
}
)
}
}
PosMachine 是上面代码封装的一个类和题主一样