尝试退出插件 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 和其他插件?
如何让 Pinch Zoom 在 webview_flutter 插件上工作
Flutter WebView 插件在 iOS 14+ 上安装时会导致应用崩溃
将 Bootstrap 主题(带有自定义 CSS 和 JS 插件)与带有 Webpacker 和 Yarn/NPM 的 Rails 6 集成