还有一个问题,我来了。使用Async任务如下:
private class ProcessFileTask extends AsyncTask<Void, byte[], Void>{
String fileName;
BufferedReader bufferedReader;
String[] splitData;
byte[] currentArray;
ByteBuffer bb;
public ProcessFileTask(String fileName) {
this.fileName = fileName;
currentArray = new byte[19];
}
@Override
protected Void doInBackground(Void... params) {
try {
bufferedReader = new BufferedReader(new FileReader(fileName));
splitData = bufferedReader.readLine().split(" ");
for (int i = 0; i < splitData.length; i += 19) {
for (int j = 0; j < 19; j++) {
currentArray[j] = Byte.parseByte(splitData[i+j]);
}
publishProgress(currentArray);
}
}
catch (Exception e){
Log.e("Exception occured", e.toString());
}
return null;
}
@Override
protected void onProgressUpdate(byte[]... values) {
super.onProgressUpdate(values);
bb = ByteBuffer.allocate(20);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(values[0], 1, 18);
ChannelOne.updateGraph(bb.getShort(0), bb.getShort(2), bb.getShort(4));
ChannelTwo.updateGraph(bb.getShort(12), bb.getShort(14), bb.getShort(16));
}
}
在执行的这一部分:
for (int i = 0; i < splitData.length; i += 19) {
for (int j = 0; j < 19; j++) {
currentArray[j] = Byte.parseByte(splitData[i+j]);
}
publishProgress(currentArray);
}
我希望每次'i'循环执行时都会调用publishProgress。当发生这种情况时(由Logging数据验证),onProgressUpdate()中的代码无法正确执行(这很明显,因为只有在AsyncTask结束后才能看到updateGraph的结果。此外,结束图完全错误 - 形成(图表主要显示直线,但必须是曲线)。
如果整个代码直接在UI Thread上运行并且图形完美呈现,则不会发生这个奇怪的问题。在这种情况下,如您所知,UI会被阻止几秒钟。
我试过,而不是AsyncTask运行代码作为单独的线程,但相同的结果仍然存在。可以做任何变通办法吗?在这种情况下可以使用服务吗?
答案 0 :(得分:0)
删除“super.onProgressUpdate(values);”后尝试来自你的代码
@Override
protected void onProgressUpdate(byte[]... values) {
bb = ByteBuffer.allocate(20);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(values[0], 1, 18);
ChannelOne.updateGraph(bb.getShort(0), bb.getShort(2), bb.getShort(4));
ChannelTwo.updateGraph(bb.getShort(12), bb.getShort(14), bb.getShort(16));
}