MultiType-FilePicker icon indicating copy to clipboard operation
MultiType-FilePicker copied to clipboard

文件加载时,执行FileFilter.getFiles 会造成主线程阻塞,如果放在子线程。又会崩溃

Open ychdevelop opened this issue 8 years ago • 2 comments

rt

ychdevelop avatar Nov 01 '17 12:11 ychdevelop

在子线程前面加上: Looper.prepare();

完整代码:

   private void loadData() {
    
    Disposable disposable = Observable.create(new ObservableOnSubscribe<List<Directory<NormalFile>>>() {
        @Override
        public void subscribe(ObservableEmitter<List<Directory<NormalFile>>> emitter) throws
                Exception {
            Looper.prepare();

            FileFilter.getFiles(NormalFilePickActivity.this, new FilterResultCallback<NormalFile>() {
                @Override
                public void onResult(List<Directory<NormalFile>> directories) {
                    // Refresh folder list
                   emitter.onNext(directories);
                   emitter.onComplete();
                }
            }, mSuffix);

        }
    }).subscribeOn(Schedulers.io())//异步任务在IO线程执行
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<List<Directory<NormalFile>>>() {
                @Override
                public void accept(List<Directory<NormalFile>> directories) throws Exception {
                    if (isNeedFolderList) {
                        ArrayList<Directory> list = new ArrayList<>();
                        Directory all = new Directory();
                        all.setName(getResources().getString(R.string.vw_all));
                        list.add(all);
                        list.addAll(directories);
                        mFolderHelper.fillData(list);
                    }

                    mAll = directories;
                    refreshData(directories);
                }
            });
}

Comert007 avatar Nov 28 '18 15:11 Comert007

在子线程前面加上: Looper.prepare();

完整代码:

   private void loadData() {
    
    Disposable disposable = Observable.create(new ObservableOnSubscribe<List<Directory<NormalFile>>>() {
        @Override
        public void subscribe(ObservableEmitter<List<Directory<NormalFile>>> emitter) throws
                Exception {
            Looper.prepare();

            FileFilter.getFiles(NormalFilePickActivity.this, new FilterResultCallback<NormalFile>() {
                @Override
                public void onResult(List<Directory<NormalFile>> directories) {
                    // Refresh folder list
                   emitter.onNext(directories);
                   emitter.onComplete();
                }
            }, mSuffix);

        }
    }).subscribeOn(Schedulers.io())//异步任务在IO线程执行
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<List<Directory<NormalFile>>>() {
                @Override
                public void accept(List<Directory<NormalFile>> directories) throws Exception {
                    if (isNeedFolderList) {
                        ArrayList<Directory> list = new ArrayList<>();
                        Directory all = new Directory();
                        all.setName(getResources().getString(R.string.vw_all));
                        list.add(all);
                        list.addAll(directories);
                        mFolderHelper.fillData(list);
                    }

                    mAll = directories;
                    refreshData(directories);
                }
            });
}

报错了 image

shengguan avatar Aug 22 '19 06:08 shengguan