上面的方法会导致触摸滑块时闪退,要怎么解决
时间: 2023-12-10 17:03:28 浏览: 65
如果在触摸滑块时出现闪退,可能是因为在 UI 线程中执行了耗时操作。为了解决这个问题,我们可以将发送数据的操作放在 AsyncTask 的 doInBackground 方法中执行,避免阻塞 UI 线程。
具体实现如下:
1. 在 onCreate 方法中获取 SeekBar 组件并设置监听器:
```
SeekBar seekBar = findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 将进度值传递给 AsyncTask
new SendDataTask().execute(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
});
```
2. 创建一个 SendDataTask 类,继承 AsyncTask 类,并实现数据发送逻辑:
```
private class SendDataTask extends AsyncTask<Integer, Void, Void> {
@Override
protected Void doInBackground(Integer... params) {
int progress = params[0];
// 将进度值发送到已连接的端口
out.println(progress);
return null;
}
}
```
在该代码中,我们将进度值通过 AsyncTask 的 execute 方法传递给 SendDataTask,然后在 doInBackground 方法中执行数据发送逻辑。这样就可以避免在 UI 线程中执行耗时操作,从而解决了触摸滑块时闪退的问题。
阅读全文