aSyncTask只运行一次

时间:2018-05-17 08:16:06

标签: android android-asynctask

我正在开发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;
    }

1 个答案:

答案 0 :(得分:0)

由于Jyoti JK和0xDEADC0DE的帮助,解决方案非常简单。

只需使用Thread.sleep(milli)代替for()循环。

现在我的aSyncTask运行良好