尝试退出插件 webview 时,在 webview 上集成插件的 Cordova 应用程序崩溃(android 测试)

Cordova app with integrated plugin on webview crash when try to exit plugin webview (android test)

当我尝试从集成在 cordova 上的 cordova 插件返回时遇到问题。当我尝试这样做时,应用程序崩溃了,我首先调试了 javascript,然后调试了 javascript 调用的本机代码,这是使应用程序崩溃的指令。

cordova.getActivity().finish();

这是在这个最全局的上下文中的 TestPlugin.java 文件中:

   if (action.equals("open")) {

    try {
      cordova.getThreadPool().execute(new Runnable() {
        @Override
        public void run() {
          Intent intent = new Intent(cordova.getActivity(),
            PhemiumEnduserActivity.class);
          cordova.getActivity().startActivity(intent);
          cordova.getActivity().overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
        }
      });
      callback.success("");
    } catch (final Exception e) {
      callback.error(e.getMessage());
    }

  }
  else if( action.equals("exit_app") ) {
    try {
      cordova.getThreadPool().execute(new Runnable() {
        @Override
        public void run() {
          cordova.getActivity().finish();
        }
      });
      callback.success("");
    } catch (final Exception e) {
      callback.error(e.getMessage());
    }
  } 

当应用程序调用插件时执行 "open" 部分,当我单击后退按钮时使 "exit_app" 部分然后在 cordova.getActivity() 上。 finish(); 应用程序在 android 工作室控制台上崩溃且没有错误。没有webview关闭的信号。我做错了什么?为什么会崩溃?

请 post 完整的插件代码或存储库,但我认为是因为您试图在另一个线程中完成 activity,或者 activity 不再存在(getActivity return 空)。

您需要像这样尝试一下:

protected Activity mActivity;
....
else if( action.equals("exit_app") ) {
    mActivity = cordova.getActivity();
    try {
      cordova.getThreadPool().execute(new Runnable() {
        @Override
        public void run() {
         if(mActivity!=null)
           mActivity.finish();
        }
      });
      callback.success("");
    } catch (final Exception e) {
      callback.error(e.getMessage());
    }
  } 

要获取更多跟踪信息,请尝试在 Android 工作室中打开 android 项目并进行调试。