aSyncTask запускается только один раз - PullRequest
0 голосов
/ 17 мая 2018

Я разрабатываю приложение для Android Bluetooth и использую aSyncTask, когда хочу сканировать доступное устройство вокруг моего.Это aSyncTask просто: в "onPreExecute()" я использую "myBluteoothAdaptaer.startDiscovery()" для обнаружения устройств и "myBluteoothAdaptaer.cancelDiscovery()" в "onPostExecute()" для его остановки.

Но когда я запускаю свое приложение, функция doInBackground()выполняется только один раз по первому клику.Если я снова нажимаю на кнопку, код Button работает, но aSyncTask не выполняется должным образом (когда он работает, для выполнения progressBar требуется 2 секунды. Когда он не работает, ему нужно только около 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 голосов
/ 17 мая 2018

Решение было очень простым, благодаря Jyoti JK и 0xDEADC0DE за помощь.

Необходимо использовать только Thread.sleep(milli) вместо for() loop.

Теперь мой aSyncTask работает хорошо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...