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

时间:2018-01-17 01:08:54

标签: android cordova plugins crash cordova-plugins

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

cordova.getActivity()结束();

这是在这个最全球化的背景下的 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());
    }
  } 

当应用程序调用插件执行“打开”部分时,当我单击后退按钮时会生成“exit_app”部分,然后单击 cordova.getActivity()。完成(); 应用程序崩溃在android studio控制台上没有错误。没有关于webview的信号。我做错了什么?为什么会崩溃?

1 个答案:

答案 0 :(得分:0)

请发布完整的插件代码或存储库,但我认为是因为您尝试在另一个线程中完成活动,或者活动不再存在(getActivity返回null)。

你需要尝试这样:

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 studio中打开android项目并进行调试。