fishwjy / MultiType-FilePicker

This is a light Android file picker library.
Apache License 2.0
1.4k stars 248 forks source link

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

Open ychdevelop opened 6 years ago

ychdevelop commented 6 years ago

rt

Comert007 commented 5 years ago

在子线程前面加上: 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);
                }
            });
}
shengguan commented 5 years ago

在子线程前面加上: 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