- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从使用 JavaScript 的网站检索 html。我的方法如下:
有趣的是,这段代码可以工作,但不一致。一次它会按预期工作,而下一次则什么也不会发生。我收到了各种奇怪的 logcat 消息,我怀疑其中之一可能是一个坏兆头: W/art: Attempt to remove non-JNI local reference, dumping thread
。今天突然想到一个想法:也许有时我的 WebView 被杀死是因为运行时环境进行了优化(并且我的 WebView 没有链接到它的 XML View 对象)?
因此,我决定尝试在 XML 中创建一个 WebView 并使用相同的代码,而不是仅仅在代码中创建一个。现在,每次运行代码时,代码都会一致地工作,并且我不再收到那些线程转储日志消息。一旦我看到页面完成加载,代码就会被执行。
请注意,我注意到我引用的这个特定网站需要相对较长的时间来加载(长达几秒钟),并且 onPageFinished 被多次调用,除非是最后一次调用,否则使用未处理的 JS 传递 html。
所以,我的问题是:有什么方法可以防止 ART 在使用 headless 版本(或任何其他解决方法)时转储我的线程?我想过保留在 XML 中定义的 WebView,并将其可见性设置为 false,但这似乎是一个资源密集型解决方案。
我正在使用 Android 模拟器(尽管我使用物理设备也得到了相同的结果),目标 API 为 24,最低 API 15。
相关代码:
private void fetchHTML(View view, String url) {
class JSInterface{
@JavascriptInterface
public void processHTML(String html){
Log.d(LOG_TAG, html); // This bit of code sometimes gets executed, and sometimes does not
}
}
//final WebView webView = (WebView) view.findViewById(R.id.webview);
final WebView webView = new WebView(context);
WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "Android");
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(webView.getProgress() == 100){
webView.loadUrl("javascript:window.Android.processHTML("
+ "'<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}
}
});
settings.setJavaScriptEnabled(true);
webView.loadUrl(url);
}
未正确执行时相关logcat:
07-15 17:16:27.616 17779-17779/com.michaelsvit.kolnoa W/System: ClassLoader referenced unknown path: /data/app/com.michaelsvit.kolnoa-2/lib/x86
07-15 17:16:28.214 17779-17779/com.michaelsvit.kolnoa W/System: ClassLoader referenced unknown path: /data/app/com.michaelsvit.kolnoa-2/lib/x86
07-15 17:16:28.267 17779-17779/com.michaelsvit.kolnoa W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-15 17:16:28.448 17779-17779/com.michaelsvit.kolnoa I/WebViewFactory: Loading com.android.webview version 44.0.2403.119 (code 246011910)
07-15 17:16:28.456 17779-17779/com.michaelsvit.kolnoa W/System: ClassLoader referenced unknown path: /system/app/webview/lib/x86
07-15 17:16:28.465 17779-17779/com.michaelsvit.kolnoa I/LibraryLoader: Time to load native libraries: 3 ms (timestamps 8656-8659)
07-15 17:16:28.465 17779-17779/com.michaelsvit.kolnoa I/LibraryLoader: Expected native library version number "",actual native library version number ""
07-15 17:16:28.470 17779-17779/com.michaelsvit.kolnoa V/WebViewChromiumFactoryProvider: Binding Chromium to main looper Looper (main, tid 1) {c4bffce}
07-15 17:16:28.470 17779-17779/com.michaelsvit.kolnoa I/LibraryLoader: Expected native library version number "",actual native library version number ""
07-15 17:16:28.470 17779-17779/com.michaelsvit.kolnoa I/chromium: [INFO:library_loader_hooks.cc(120)] Chromium logging enabled: level = 0, default verbosity = 0
07-15 17:16:28.476 17779-17779/com.michaelsvit.kolnoa I/BrowserStartupController: Initializing chromium process, singleProcess=true
07-15 17:16:28.479 17779-17779/com.michaelsvit.kolnoa W/art: Attempt to remove non-JNI local reference, dumping thread
07-15 17:16:28.479 17779-17779/com.michaelsvit.kolnoa E/SysUtils: ApplicationContext is null in ApplicationStatus
07-15 17:16:28.484 17779-17779/com.michaelsvit.kolnoa W/chromium: [WARNING:resource_bundle.cc(285)] locale_file_path.empty()
07-15 17:16:28.487 17779-17779/com.michaelsvit.kolnoa E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
07-15 17:16:28.487 17779-17779/com.michaelsvit.kolnoa E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
[ 07-15 17:16:28.488 17779:17779 D/ ]
HostConnection::get() New Host Connection established 0xac3edff0, tid 17779
07-15 17:16:28.525 17779-17779/com.michaelsvit.kolnoa E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008d57
07-15 17:16:28.552 17779-17779/com.michaelsvit.kolnoa E/DataReductionProxySettingListener: No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp
07-15 17:16:28.568 17779-17831/com.michaelsvit.kolnoa W/AudioManagerAndroid: Requires BLUETOOTH permission
07-15 17:16:28.578 17779-17779/com.michaelsvit.kolnoa W/art: Attempt to remove non-JNI local reference, dumping thread
07-15 17:16:28.582 17779-17779/com.michaelsvit.kolnoa W/AwContents: onDetachedFromWindow called when already detached. Ignoring
07-15 17:16:28.584 17779-17779/com.michaelsvit.kolnoa W/art: Attempt to remove non-JNI local reference, dumping thread
07-15 17:16:28.585 17779-17779/com.michaelsvit.kolnoa W/AwContents: onDetachedFromWindow called when already detached. Ignoring
07-15 17:16:28.587 17779-17779/com.michaelsvit.kolnoa W/art: Attempt to remove non-JNI local reference, dumping thread
07-15 17:16:28.587 17779-17779/com.michaelsvit.kolnoa W/art: Attempt to remove non-JNI local reference, dumping thread
07-15 17:16:28.620 17779-17841/com.michaelsvit.kolnoa D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
07-15 17:16:28.639 17779-17829/com.michaelsvit.kolnoa W/chromium: [WARNING:data_reduction_proxy_config.cc(423)] SPDY proxy OFF at startup
07-15 17:16:28.740 17779-17841/com.michaelsvit.kolnoa I/OpenGLRenderer: Initialized EGL, version 1.4
[ 07-15 17:16:28.741 17779:17841 D/ ]
HostConnection::get() New Host Connection established 0xa0a5f8d0, tid 17841
07-15 17:16:28.782 17779-17841/com.michaelsvit.kolnoa W/EGL_emulation: eglSurfaceAttrib not implemented
07-15 17:16:28.782 17779-17841/com.michaelsvit.kolnoa W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xaa3d9180, error=EGL_SUCCESS
[ 07-15 17:16:28.815 17779:17850 D/ ]
HostConnection::get() New Host Connection established 0xa0c82c80, tid 17850
07-15 17:16:29.166 17779-17779/com.michaelsvit.kolnoa W/BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 17779
07-15 17:16:29.279 17779-17779/com.michaelsvit.kolnoa D/MovieGridFragment:
07-15 17:16:29.768 17779-17779/com.michaelsvit.kolnoa W/BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 17779
07-15 17:16:30.894 17779-17779/com.michaelsvit.kolnoa I/chromium: [INFO:CONSOLE(2)] "Uncaught TypeError: Cannot read property 'length' of undefined", source: (2)
07-15 17:16:31.196 17779-17829/com.michaelsvit.kolnoa W/chromium: [WARNING:spdy_session.cc(2527)] Received WINDOW_UPDATE for invalid stream 1
最佳答案
按照我提出的想法,我保留了 XML 定义的 WebView(可见性设置为“消失”)并使用它,而不是在运行时创建它。从那以后我再也没有遇到过任何问题。
关于java - ART 在加载完成之前杀死 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402165/
我是 React-native 的新手。 我遇到了这个错误:UnableToResolveError:无法从 Libraries/ART/ReactNativeART.js 解析模块 merge 我使
自 Android Lollipop 以来,Google 已将 DVM 替换为 ART,因为 ART 比 DVM 更快。还有其他原因吗? 最佳答案 ART 带来了一些主要的性能改进,这是 Dalvik
在具有目标 SDK 29 的 Android 应用程序上从 5.11.0 更新到 Facebook Audience 6.2.0 后,我在一小部分 Android 11 设备上看到了大量的崩溃报告。根
我正在尝试将 Android Lollipop 移植到 arndale 板上,但我面临以下有关 ART 崩溃 (AndroidRunTime) 的问题。 > I/art ( 2264): Reloca
我正在使用 newLisp 试用 Artful Mysql 模块,使用示例的“冒烟”测试未连接到 MySQL。 假设: 我是一名新手 Lisp 程序员。 平台是 MacOS X 10.9 新语言 10
Android 5.0+ 中 ART 运行时的一个被吹捧的功能是堆压缩,以减少堆 fragment 。 fragment 堆可以更容易地获得 OutOfMemoryErrors,因为可能没有一个连续的
我正在研究 ARKit(iPhone 框架),ARKit 项目免费提供的文件夹之一是标题为:art.scnassets 的文件夹。 .这些代表什么:art. ? .scn ? .dea ? tex ?
我目前正在使用 React Native ART 模块,除 Text 组件外一切正常,但该错误仅发生在 iOS 和 android 中 一切似乎都按预期工作。 当我尝试在 iOS 中使用 Text 组
对于那些熟悉“Prolog 的艺术”的人,您会建议使用哪些软件工具(例如 IDE、编辑器、编译器等)来学习这本书? 最佳答案 SWI-Prolog是一个免费的 Prolog 实现,带有一个集成编辑器(
我要为 Android 开发我的第一个应用程序(不用担心这只是一个学校项目,不会成为市场上另一个无用的应用程序:>)。 因此,在开始这项任务之前,我做了一些教程,其中之一(我认为它非常有用,因为有 s
我正在尝试从使用 JavaScript 的网站检索 html。我的方法如下: 创建一个 headless WebView(没有在 XML 中定义任何 View )并启用 JS。 创建一个 JavaSc
我希望 Android 运行时 (ART) 写入文件。因此,我将以下代码添加到 WORKING_DIRECTORY/art/runtime/runtime.cc。 std::string pid_
不知ART是不是虚拟机。 dex2oat 将 dalvik 字节代码编译成 native (特定于平台)代码,即 elf 文件。所以正如 android 开发者文章中提到的,它仍然有垃圾收集器。我不明
对于一些使用 ART 的用户,我在使用 Aviary SDK 时遇到了一个奇怪的错误。我很困惑为什么会发生这种情况(显然仅在 4.4.x 上),因为在 Dalvik 上调用此 SDK 时该应用程序可以
我已阅读互联网上有关适用于 Android 操作系统的新 ART 运行时的文章。许多文章称 ART 为新的虚拟机,我认为这是错误的,因为应用程序在安装后完全编译为 native 机器代码。如果 ART
我想知道并在谷歌上搜索答案,但没有找到。那么,更新的 ART 沙盒应用程序是否像 Dalvik VM?更准确地说,这个链接的图片也可以申请ART吗? http://davidchang168.blog
我想使用程序或图形库将图像转换为 ASCII 艺术,但我想指定要使用的调色板(符号)。所以基本上我想要一个图像,它从某个字母 A 呈现为文本,它是完整 ASCII 表的子集,例如 A := {a,b,
我正在阅读这本书 Art of Exploitation,这是一本好书,我从exploit_notesearch.c 文件中看到了那个例子。 简要作者尝试从notesearch.c溢出程序 int m
我有 3 个表 actor 、 movie 、 casting 。我必须找到与 Actor “ART Garfunkel”合作过的人。 我有解决方案,但我无法理解以下查询的工作原理。 **movie*
我的 android 应用程序中有一个 SQLite 数据库,但不幸的是,使用新的虚拟机 ART 它停止工作。 我在 DbHelper 类中遇到错误,特别是当我打开数据库以写入/读取它时。 我需要帮助
我是一名优秀的程序员,十分优秀!