我正在开发Android蓝牙应用程序,当我想扫描我的可用设备时,我使用了一个同步任务。这个aSyncTask
很简单,在"onPreExecute()"
中,我使用"myBluteoothAdaptaer.startDiscovery()"
来发现设备,并使用"myBluteoothAdaptaer.cancelDiscovery()"
"onPostExecute()"
来阻止它。
但是当我运行我的应用程序时,doInBackground()
功能在第一次点击时只执行一次。如果我再次单击按钮,Button的代码可以正常工作,但是aSyncTask没有正确执行(当它工作时,progressBar需要2s才能完成。当它不起作用时,它只需要0.1 ms
左右来完成它)。
因此,此错误可能来自doInBackground()
,请停在onPreExecute()
或类似的内容?
提前感谢您的帮助。
以下是代码:
按钮点击代码:(只需设置一个)
/** Scan on click **/
Scan_btn.setOnClickListener(new View.OnClickListener() { // click on SCAN button
@Override
public void onClick(View view) {
if (!blueAdapter.isDiscovering()) {
//blueAdapter.startDiscovery();
Scan_btn_clic = true;
} else {
//blueAdapter.cancelDiscovery();
Scan_btn_clic = false;
}
Maj scan = new Maj();
scan.execute();
}
});
/***********/
doInBackground()函数:
@Override
protected Void doInBackground(Void... arg0) {
int progress;
for (progress=0;progress<=100;progress++)
{
if (blueAdapter.isEnabled() && Scan_btn_clic == false || !blueAdapter.isEnabled())
{
for (int i=0; i<5000000; i++){}
//la méthode publishProgress met à jour l'interface en invoquant la méthode onProgressUpdate
publishProgress(progress);
progress++;
}
else if (blueAdapter.isEnabled() && Scan_btn_clic == true)
{
for (int i = 0; i < 100000000; i++) {}
//la méthode publishProgress met à jour l'interface en invoquant la méthode onProgressUpdate
publishProgress(progress);
progress++;
}
}
return null;
}
答案 0 :(得分:0)
由于Jyoti JK和0xDEADC0DE的帮助,解决方案非常简单。
只需使用Thread.sleep(milli)
代替for()
循环。
现在我的aSyncTask运行良好