- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从配件的 InputStream
读取字节而不阻塞线程(如果可能)。
通常,我会将 read(buffer)
调用包装在 if available()
中,但是 available() 会抛出异常(即使 read() 工作正常在 InputStream 上)。
是否有任何其他解决方案可以最大限度地减少线程阻塞?
编辑:
我设置了 AsyncTask
来在后台进行读取(尽管我知道我应该为扩展任务使用一个真正的线程),并且它运行良好。
我想真正的问题是,后台线程不断被“读取”调用阻塞是否会对性能造成任何损害?现在没有效果,但是应用程序很快就会变得非常密集,我想至少让通信尽可能轻量级。
BufferedInputStream
会完全减少负载吗?它有自己的 available() 方法。
最佳答案
在回答您编辑过的问题时,不,在 read()
调用中阻塞后台线程不会造成性能损失。基本上就好像后台线程正在休眠一样。
但是,如果您不断产生后台线程,并且您一直允许所有这些线程永远阻塞在 read()
上,那么您将遇到非常严重的内存泄漏。它不会在速度或类似方面降低性能,但最终会使您的应用程序崩溃。
是的,确保您的后台线程最终终止很重要(或者至少保证您的代码不会在现有线程未终止的情况下继续尝试添加新线程)。
这应该可以解决原始问题:
public interface StreamDataHandler {
public void handleData(byte[] buffer, int numBytes);
public void readFailedWithError(Exception ex);
}
public class DataReader extends Thread {
private StreamDataHandler handler;
private InputStream input;
public DataReader(InputStream in, StreamDataHandler handler) {
super();
this.input = in;
this.handler = handler;
}
@Override
public void run() {
int numRead = 0;
byte[] buffer = new byte[1024];
try {
while ((numRead = input.read(buffer)) != -1) {
if (this.handler != null && numRead > 0) {
this.handler.handleData(buffer, numRead);
}
}
}
catch (Exception e) {
if (this.handler != null) {
this.handler.readFailedWithError(e);
}
}
}
}
关于android - 使用 Android ADK 进行线程阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9422964/
goep.h,goep_apphdrs.h,oppc.h,opps.h,ftpc.h,ftps.h CSR ADK 3.0说这些文件存在于CSR ADK 4.0中。如何使用这些文件? 最佳答案 我相信
所以几天前我拿到了一 block Arduino Mega ADK 开发板,最近几个晚上我一直在设置我的开发环境,开始使用工具等。工具和库都运行良好,例如,我可以获得一个在 Processing ID
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
是否可以使用 ADK 将多个配件连接到我的设备?例如使用 nexus 和 USB 集线器。我可以连接两个 arduino 开发板吗? 最佳答案 目前这是不可能的,但 API 确实允许在底层系统可以时支
关于 ADK 和 Eclipse 的快速问题,eclipse 右下角的这个看起来像永不消失的进度条的指示器是什么意思?我的通常会说“161 中的 81”并四处弹跳但永远不会消失。 抱歉,我知道这是一个
我正在尝试开始使用 Android ADK。 我的目标是通过蓝牙连接 Arduino UNO + 蓝牙和 Android 设备。 我发现 ADK 需要用于 Android 2.3.4 的 Linux
我想检查当前日期是否等于(或包含)某个定义的日期间隔。我有这样的东西: Calendar c1 = Calendar.getInstance(); SimpleDat
刚开始试用 Android ADK,但我无法在我的开发手机上安装 DemoKit 项目,我的手机是运行 Android 2.3.3 的 Droid X。 当我尝试使用手机作为设备运行 DemoKit
我试图清楚地了解在进行 Android/ADK 开发时实际涉及的内容。 SO 上有一些零散的 Android/ADK 相关问题,通常很少有相关答案。 我有一些与开发相关的问题以及答案是什么的想法 -
我正在尝试从配件的 InputStream 读取字节而不阻塞线程(如果可能)。 通常,我会将 read(buffer) 调用包装在 if available() 中,但是 available() 会抛
我正在尝试让我的大型 ADK 与 Google Nexus 4 设备(LG 出品)配合使用,但几乎没有成功。甚至没有来自 Play 商店的演示应用程序。有没有人能够让这款手机与 ADK 一起使用?或者
我正在尝试运行 Arduino ADK + Android 示例(analogRead、digitalWrite 等),但出现以下编译错误: -compile: [javac] Compil
我正在尝试让 android ADK 示例应用程序正常工作。 Java 的东西工作正常。 arduino 代码编译没有问题。 我遇到的一个问题是,即使我安装了 FTDI 驱动程序,我的 OSX 上也根
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有一个一般性的快速问题,因为您永远无法联系到 Google 的开发人员,所以我想我会在这里发布问题... 谁能告诉我,如果我们想使用我们的手机通过 USB 连接到由 dream cheeky 制造的
我正在研究一个新想法并且代码进展顺利,但我遇到了一些问题,需要您的帮助。 我最近以高得离谱的价格买了一个破旧的游戏机(我不知道确切的英文单词),而且,由于它非常破旧,我有想法用 Android 操作系
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在使用 Galaxy Nexus (4.2.2) 和 ADK Board(Microchip Co. 的 PIC24F)制作一个使用 Android Open Accessory 的应用程序。 在
我花了几天时间试图让 android ADK 连接在服务中运行,而不是在 Activity 中运行......有人知道这是否可能吗? 我想让服务处理 inputStream 和 outputStrea
我想在 Epson POS 打印机上将收据打印为位图。但打印机不是直接连接的。收据渲染在后端 Web 服务上完成,生成的字节将发送到实际连接打印机的前端。 所以我查看了 Epson JavaPOS A
我是一名优秀的程序员,十分优秀!