我正在開發一個基於傳感器的應用程序,我通過BLE連接不斷收集傳感器的數據,並將其顯示在圖形上。我想嚮應用程序添加一個算法,該算法將在接收到的每個新值上運行,並在UI中顯示結果。由於數據傳輸是連續進行的,我希望算法可以在後臺運行,因此要繪製的數據將保持速度。 我正在閱讀幾種方法(AsyncTask,Thread等),但作爲新手: 1.我不完全明白哪個更好 2.我無法正確實現它。當值改變時開始後臺任務java
下面是相關的代碼:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
//Call to the algorithm class
RespAlgo myAlgo = new RespAlgo();
@Override
protected void onCreate(Bundle savedInstanceState) {
//Code to initiate the graphs...
}
private final BluetoothGattCallback mGattCallback =
new BluetoothGattCallback() {
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)
{
// Here I catch the data from the BLE device
for (int i_bt_nTs = 0; i_bt_nTs < getResources().getInteger(R.integer.bt_nTs); i_bt_nTs++) {
//V2V8, S1, S2, S3
// k = R3/(Rs + R4) = V2V8/(ADCval * LSB/Gain + V2V8/2) - 1
// Rs = R3/k - R4
v2v8_val = v2v8_2_bval * 2 * adc_lsb * vbat_correction;
k = v2v8_val/(characteristic.getIntValue(FORMAT_UINT16, 2 + 6 * i_bt_nTs) * adc_lsb/ina_gain + v2v8_val/2) - 1;
rs1 = R3/k - R4;
//run the algorithm. the below should move to parallel task
// Add counter to the algorithm
myAlgo.addTime();
//Add value from the sensor to the algorithm
myAlgo.setValue(rs1);
//Return result to rr1 variable
rr1 = (float)myAlgo.getRR();
// Change the UI with the new value
myRR1.setText(String.valueOf(rr1));
}
}
最有可能的是,AsyncTask是最好的解決方案。它提供了比Thread更高級別的併發性抽象。 –
AsyncTask可能是一個問題,因爲它基於固定大小的線程池,並在大量任務排隊等待執行時導致問題。 – Dibzmania
如果您認爲自己的活動可能會停止或更改,請使用服務並回報該活動。 – Linxy