【发布时间】:2015-12-17 21:23:32
【问题描述】:
我编写了一个像这样工作的结构:
Activity discoveryActivity - UI thread
↕ Calls through interface
Service discoveryService - Bound service running on UI thread
↕ Actions through Handler.post(↑) or functions (↓)
Runnable connectionThread - Socket networking
在某些时候connectionThread 需要String 才能继续。
- 所以我用
Handler.post(..)打电话给discoveryService - 通知
discoveryActivity显示AlertDialog
用户输入数据大约需要20秒,并会确认输入。
问题1: 在此期间线程会做什么?
现在我需要再次进入线程。
前往discoveryService 很容易
问题 2: 如何在不重新启动的情况下让线程再次工作?该线程现在处于一个复杂的循环中,有几个Sockets!
我的第一个想法是保持线程运行
// Inside run()
while(stringWrapper.get() == null) {
Thread.sleep(500);
}
// Outside run()
void setStr(String s) { stringWrapper.set(s); }
但那是低效的
然后我读到了wait() 和notify()
我在线程本身和StringWrapper(一个包含对String 的引用的简单类)上进行了尝试
我很无奈知道,我认为wait() 和notify() 是正确的方法吗?
您能否给我一个提示,我应该在哪里实现这些以及在哪个对象上调用它们?
TL;DR:我想让线程暂停,直到它接收到数据
【问题讨论】:
-
您是否使用了 OKHttp 或 Java 的 URLConnection 等库无法处理的自定义网络协议?看来您的应用程序编码水平非常低。
-
我不使用除了 BouncyCastle 之外的任何库,我需要
BKS支持。我开发的协议适用于状态,我稍微修改了 SSL 握手。
标签: java android multithreading service wait