我在Android上相对较新(为我的技能水平提供背景信息)。
摘要(问题在底部说明):我的应用程序使用了大量的CPU(听起来很基本,对不起),我认为这是因为我使用了3000个数据点。
上下文:我正在制作一个从蓝牙LE服务中获取字节的应用
private void broadcastUpdate(final String action,final BluetoothGattCharacteristic characteristic) {
final Intent intent = new Intent(action);
// For all other profiles, writes the data formatted in HEX.
final byte[] data = characteristic.getValue();
Log.i(TAG, "data"+characteristic.getValue());
if (data != null && data.length > 0) {
final StringBuilder stringBuilder = new StringBuilder(data.length);
for(byte byteChar : data)
stringBuilder.append(String.format("%02X ", byteChar));
Log.d(TAG, String.format("%s", new String(data)));
// getting cut off when longer, need to push on new line, 0A
intent.putExtra(EXTRA_DATA,String.format("%s", new String(data)));
}
sendBroadcast(intent);
}
在另一项活动中,我使用数据点将数据附加到图表中。 (displayData只显示我进入文本视图的数据)。
else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
//cnt starts at 0
String data = intent.getStringExtra(mBluetoothLeService.EXTRA_DATA);
double y = Double.parseDouble(data); //create type:double version of data
if(cnt == 3000) { //if graph maxes out regenerate new data
cnt = 0; //set the count back to zero
clearUI(); //clear textView that displays string version
series.resetData(new DataPoint[] {new DataPoint(cnt + 1, y)});
}
else //if there is no need to reset the map
{
series.appendData(new DataPoint(cnt + 1, y), false, 3000); //append that data to the series
}
displayData(data, y); //display cnt, data(string), and y(double)
cnt++;
}
使用串口测试仪,发送号码" 12.5"每隔60ms,绘图过程就可以正常工作,直到我达到大约300个数据点。之后,应用程序变得迟钝。 Logcat表示正在跳过30-34帧。通过3000个数据点,Logcat声明正在跳过62-74帧。
问题:如何更好地构建数据和/或使应用运行更顺畅?