yanzhenjie / Album

:watermelon: Album and Gallery for Android platform.
https://github.com/yanzhenjie/Album
Apache License 2.0
2.5k stars 507 forks source link

发现大BUG #132

Closed douya40 closed 6 years ago

douya40 commented 6 years ago

使用代码:单选图片 问题描述:反复停的选择图片,返回有弹框提醒,有的时候没有弹框提醒,会造成选择的图片没有返回,实际我是点击的,不稳定。有的时候返回有的时候就不返回了 private void selectImage(int requestCode) { Album.image(this) .singleChoice() .requestCode(requestCode) .camera(true) .columnCount(3) .widget( Widget.newDarkBuilder(_mActivity) .title("选择图片") .build() ) .onResult(new Action<ArrayList>() { @Override public void onAction(int requestCode, @NonNull ArrayList result) { ToastUtils.show("requestCode"); compression(result.get(0).getPath(),requestCode); } }) .onCancel(new Action() { @Override public void onAction(int requestCode, @NonNull String result) { Toast.makeText(_mActivity, R.string.canceled, Toast.LENGTH_LONG).show(); } }) .start(); }

douya40 commented 6 years ago

严大看看这个问题呀

qinzee commented 6 years ago

@douya40 @yanzhenjie 造成这个问题的原因是AlbumActivity不能立刻销毁,调用finish()后要2s多才能onDestroy()。导致第二次设置的Result和Cancel被置null。 对AlbumActivity.java做如下修改即可: 把这段代码

 @Override
    protected void onDestroy() {
        mSizeFilter = null;
        mMimeFilter = null;
        mDurationFilter = null;
        sResult = null;
        sCancel = null;
        super.onDestroy();
    }

修改为:

@Override
    public void finish() {
        mSizeFilter = null;
        mMimeFilter = null;
        mDurationFilter = null;
        sResult = null;
        sCancel = null;
        super.finish();
    }
@Override
    protected void onDestroy() {
        super.onDestroy();
}
yanzhenjie commented 6 years ago

这种情况下是存在这种问题的,就算改成你给出的代码也会出现。不建议连续这样调用,如果非要连续调用你可以延迟250ms+。 另外2.1.0版本会重构,但是还是不能完全避免这种问题,由于内部设计不适合延迟回调。