#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 мс представляют собой поток, который активно выполняется.