【发布时间】:2014-02-19 08:10:26
【问题描述】:
我的应用程序每 80 毫秒获取一次数据(我今天问老板,他说 80 毫秒还可以,但最好是 2 毫秒 - 20 毫秒,比我想象的还要快)。我需要处理传入的消息,因此我尝试使用 if 子句处理它们,并且每次 if 子句为真时,TextView 中都会设置一个新文本@
像这样:
if (data.equalsIgnoreCase(test)) {
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(" 30 % ");
}
问题在于,数据传入的速度如此之快,而 if 子句似乎不够“快”来处理它。
TextView 仅在我停止传输消息时更改,然后在短暂“等待”后TextView更改。
有什么东西可以让它更“实时”吗?
我没有通过谷歌找到有用的东西,我的编程技能很弱,只是为了防止更多的反对
编辑:
我现在发现,我必须检查 768 个不同的值(所有十六进制代码)。所以会有 768 个 if 语句。那肯定会降低速度。
问题是,我不能“等待”先执行 if 语句,然后获取下一条消息。
消息刚刚流入。
我刚刚更新了我的代码,现在使用 ProgressBar 而不是 TextView
if (data.equalsIgnoreCase(TEST)){
mProgressBar.setProgress(0);
}
EDIT2:添加Thread代码
class RxThread extends Thread {
private static final String TEST = "0 0 0 0 0 40 0 0 ";
private static final String TEST2 = "0 1 0 0 0 41 0 0 ";
private static final String TEST3 = "2 bb 0 0 2 fb 0 0 ";
private static final String TEST4 = "2 bd 0 0 2 fd 0 0 ";
private static final String TEST5 = "2 be 0 0 2 fe 0 0 ";
Handler myHandler = new Handler();
final Runnable r = new Runnable() {
public void run() {
demoRxMsg = new MessageStructure();
while (rxChannel.receiveMessage(demoRxMsg) == ReturnCode.SUCCESS) {
String data = "";
String format = "";
rxChannel.receiveMessage(demoRxMsg);
if (demoRxMsg.frameFormat == API_ADK.STANDARD_FRAME) {
format = "SFF";
} else {
format = "EFF";
}
for (byte i = 0; i < demoRxMsg.dataLength; i++) {
data = data + Integer.toHexString(demoRxMsg.data[i]) + " ";
}
if (data.equalsIgnoreCase(TEST)){
mProgressBar.setProgress(0);
} else if (data.equalsIgnoreCase(TEST2)) {
mProgressBar.setProgress(1);
} else if (data.equalsIgnoreCase(TEST3)) {
mProgressBar.setProgress(94);
} else if (data.equalsIgnoreCase(TEST4)) {
mProgressBar.setProgress(95);
} else if (data.equalsIgnoreCase(TEST5)) {
mProgressBar.setProgress(96);
}
}
}
}
};
public void run() {
while (true) {
try {
Thread.sleep(60);
myHandler.post(r);
} catch (InterruptedException e) {
break;
}
}
}
如何让它表现更好?
编辑 3:
为了更好地解释它必须有多快:
目前,我每 80 毫秒收到一条十六进制格式的消息。消息对象有5项:帧格式、数据格式、数据长度、消息ID和数据。在完美的情况下,我每 2-20 毫秒得到一个。
我必须区分 768 条不同的消息。这些消息除以 200(得到 0.5% 的步长)。
我想要的是一个ProgressBar,它随着十六进制代码“下雨”和百分比状态的变化而变化和流畅地运行。
一个问题是,我对接收消息的速度没有影响。它总是一样的速度。是否有可能这么快地处理数据?
【问题讨论】:
-
您应该编辑您的问题,以展示您在多线程方面所做的努力——如果有的话
-
好的,马上编辑
-
@avalancha,你知道如何解决吗?
标签: java android multithreading performance android-progressbar