s***@cards-star.com
s***@cards-star.com
  • 发布:2023-10-18 09:25
  • 更新:2023-11-27 10:00
  • 阅读:444

【报Bug】UniJSCallback.invoke偶发性不回调JS层

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Win10 22H2

HBuilderX类型: 正式

HBuilderX版本号: 3.8.12

手机系统: Android

手机系统版本号: Android 12

手机厂商: 华为

手机机型: P40

页面类型: vue

vue版本: vue2

打包方式: 离线

项目创建方式: HBuilderX

示例代码:
public class AppCameraModule extends UniModule {  

    private UniJSCallback cameraCallback;  

    @UniJSMethod  
    public void openCamera(JSONObject options, UniJSCallback callback) {  
        if (mUniSDKInstance != null) {  
            ((Activity) mUniSDKInstance.getContext()).startActivityForResult(intent, 0);  
        }  
        // 有且仅有此处缓存callback,在一次完整openCamera的调用-回调过程中不会重复调用  
        cameraCallback = callback;  
    }  

    @Override  
    public void onActivityResult(int requestCode, int resultCode, Intent data) {  
        super.onActivityResult(requestCode, resultCode, data);  

        if (resultCode == RESULT_TAKE_PHOTO_SUCCESS) {  
            // 日志上可以确定走了本if分支,并且cameraCallback 不为null  
            if (cameraCallback != null) {  
                Log.d(TAG, "cameraCallback = " + cameraCallback);  
                JSONObject result = new JSONObject();  
                String urls = data.getStringExtra("urls");  
                result.put("code", 0);  
                result.put("urls", JSONArray.parse(urls));  
                // 调用后JS层小概率未收到回调  
                cameraCallback.invoke(result);  
                cameraCallback = null;  
            }  
        } else if (resultCode == RESULT_SELECT_PHOTO_SUCCESS) {  
            // ...无关代码  

        } else {  
            // ...无关代码       
        }  
    }  
}

操作步骤:

操作流程:

  1. JS层调用UniModule原生方法
  2. 原生方法内调起原生Activity,UniModule缓存callback
  3. 原生Activity返回,UniModule中onActivityResult收到返回结果
  4. onActivityResult中调用callback.invoke()
  5. 小概率JS层并没有收到回调

预期结果:

正常回调JS层

实际结果:

JS层小概率收不到回调

bug描述:

操作流程:

  1. JS层调用UniModule原生方法
  2. 原生方法内调起原生Activity,UniModule缓存callback
  3. 原生Activity返回,UniModule中onActivityResult收到返回结果
  4. onActivityResult中调用callback.invoke()
  5. 小概率JS层并没有收到回调
2023-10-18 09:25 负责人:无 分享
已邀请:
wwwzzz

wwwzzz

遇到同样的问题

要回复问题请先登录注册