Почему профилировщик Android Studio не показывает активность в потоках AsyncTask

#java #android-asynctask #profiler #java-threads

#java #android-asynctask #профилировщик #java-потоки

Вопрос:

У меня есть два потока AsyncTask, каждый из которых перемещает файлы из одной папки в другую, однако эта активность не отображается в профилировщике Android Studio

Честно говоря, полностью потерян, поскольку время от времени он будет показывать активность в течение 200 мс, но только один раз и в одном из потоков

В MainActivity:

     new AsyncThread().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,  true);
    new AsyncThread().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,  false);
  

AsyncTask:

 protected Void doInBackground(Boolean... Upper) {
    while(startPoint <= (endPoint)){
       ...

        try {
            if (sourceFile.exists()) {
                try{
                    sourceFile.renameTo(targetLocation);
                    publishProgress();
                    startPoint  ;
                } catch(Exception e){
                    System.out.println("Error");
                }
            } else {
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
            Log.i("failed: ", "nullPointer");
        } catch (Exception e) {
            e.printStackTrace();
            Log.i("failed: ", "exception e");
        }
        try {Thread.currentThread().sleep((int)(1000));
       } catch (InterruptedException e) {}
    }

    return null;
}
@Override
protected void onProgressUpdate(Void... progress) {
    try{
        MainActivity.semaphore.acquire();
        MainActivity.noOfFilesTransfered  ;
        MainActivity.semaphore.release();
    } catch(Exception e){}
}
  

Ответ №1:

sleep() -ing потоки не показывают активность в профилировщике, потому что они не запущены. Ваши потоки проводят большую часть своего времени в режиме ожидания.

Не сразу понятно, что представляют собой эти 200 мс активности, но вы можете быть уверены, что ваш профилировщик корректен, и что 200 мс представляют собой поток, который активно выполняется.