Я делаю своего рода файловый менеджер, в котором я хочу получить все файлы из external or internal storage(files like APK, images, videos etc)
, а затем привязываю эти извлеченные данные к recycler view
, я использовал asyncTask
для выполнения этой операции, это работает нормально работает, когда я запускаю свое приложение на эмуляторе, потому что файлов очень мало, но когда я запускаю это приложение на реальном устройстве, оно зависает на экране на 40-50 секунд после обновления пользовательского интерфейса
Вот мой код
protected ArrayList<Integer> getFile(File dir) {
File listFile[] = dir.listFiles();
Log.i(">>Files", "getFile: " + Arrays.toString(dir.listFiles()));
if (listFile != null && listFile.length > 0) {
for (File aListFile : listFile) {
if (aListFile.isDirectory()) {
fileList.add(aListFile);
getFile(aListFile);
} else {
if (aListFile.getName().endsWith(".png")) {
Log.i(">>Image", "getFile: " + aListFile.getName());
pngImageList.add(aListFile);
} else if (aListFile.getName().endsWith(".jpg") || aListFile.getName().endsWith(".jpeg")) {
jpegImageList.add(aListFile);
} else if (aListFile.getName().endsWith(".gif")) {
gifList.add(aListFile);
} else if (aListFile.getName().endsWith(".pptx") || aListFile.getName().endsWith(".ppt")) {
pptxList.add(aListFile);
} else if (aListFile.getName().endsWith(".docx") || aListFile.getName().endsWith(".doc")) {
docxList.add(aListFile);
} else if (aListFile.getName().endsWith(".pdf")) {
pdfList.add(aListFile);
} else if (aListFile.getName().endsWith(".txt")) {
txtList.add(aListFile);
} else if (aListFile.getName().endsWith(".apk")) {
apkList.add(aListFile);
}
}
}
}
return fileSizes;
}
и вызов этой функции в asyncTask's doInBackground
, как это
@Override
protected Void doInBackground(Void... voids) {
getFile(file);
return null;
}
и после этого я связываю эти извлеченные данные в onPostExecute
методе, подобном этому
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
showDialog(false);
takeAway.add(pngImageList);
takeAway.add(jpegImageList);
takeAway.add(gifList);
takeAway.add(pptxList);
takeAway.add(docxList);
takeAway.add(pdfList);
takeAway.add(txtList);
takeAway.add(apkList);
lLayout = new GridLayoutManager(getActivity(), 3);
insightList.setHasFixedSize(true);
insightList.setLayoutManager(lLayout);
insightAdapter = new InsightAdapter(getActivity(), takeAway,COLORFUL_COLORS1);
insightList.setAdapter(insightAdapter);
insightAdapter.notifyDataSetChanged();}
Я тоже пытался использовать RX JAVA, но безуспешно, потому что даже тогда мне пришлось использовать asyncTask для получения всех файлов.
Будем благодарны за любую помощь или предложение