【发布时间】:2020-03-22 11:52:15
【问题描述】:
我无法理解如何为我在 Android 中的线程问题找到解决方案。所以基本上下面的当前(简化)代码在主线程上运行,这给我带来了一些问题,因为方法 calculateMeanMagnitude() 和 predict() 很慢,因此会按预期阻止 UI。
我想做的是在一个单独的线程中计算这两个函数,一旦我完成了在我的 UI 线程中调用updateData()。
从语法的角度来看,我真的不知道如何做到这一点,也不知道如何避免在 updateData() 之前忙于等待,因为这也会阻塞 UI 线程。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
}
private double calculateMeanMagnitude(ArrayList<SensorReading> accReadings, boolean isAcc) {
return 0.0;
}
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
if (data == null) return;
if (data.containsKey(Constants.WindowBroadcastExtraName)) {
ScanResult scan = (ScanResult) data.getSerializable(Constants.WindowBroadcastExtraName);
if (scan != null) {
double meanMagnitude = calculateMeanMagnitude(scan.getAccReadings(), true);
float[] predictions = predict(meanMagnitude);
updateData(isStill, predictions, scan.getLocationScans());
}
}
}
};
}
【问题讨论】:
-
我建议您将代码转换为
kotlin并使用coroutines -
一个简单的解决方案是使用 handler 来通信 UI 线程和工作线程。
标签: java android multithreading