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

Posted

技术标签:

【中文标题】尝试退出插件 webview 时,带有集成插件的 Cordova 应用程序在 webview 上崩溃(android 测试)【英文标题】:Cordova app with integrated plugin on webview crash when try to exit plugin webview (android test) 【发布时间】:2018-06-25 19:26:31 【问题描述】:

当我尝试从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());
    
   

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

【问题讨论】:

【参考方案1】:

请发布完整的插件代码或存储库,但我认为是因为您尝试在另一个线程中完成活动,或者活动不再存在(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 项目并进行调试。

【讨论】:

以上是关于尝试退出插件 webview 时,带有集成插件的 Cordova 应用程序在 webview 上崩溃(android 测试)的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS/WebView:为啥加载本地页面时无法使用 Flash 和其他插件?

需要将 jQuery 验证插件与 jsf 集成

如何让 Pinch Zoom 在 webview_flutter 插件上工作

Flutter WebView 插件在 iOS 14+ 上安装时会导致应用崩溃

将 Bootstrap 主题(带有自定义 CSS 和 JS 插件)与带有 Webpacker 和 Yarn/NPM 的 Rails 6 集成

flutter webview插件打开缩小窗口