我使用WebView在我们的某个应用程序的活动中显示一些互联网内容.
问题是,当用户切换到此活动时,WebView的线程会继续运行!
有问题的线程是:
Thread [<17> WebViewCoreThread] (Running)
Thread [<25> CookieSyncManager] (Running)
Thread [<19> http0] (Running)
Thread [<29> http1] (Running)
Thread [<31> http2] (Running)
Thread [<33> http3] (Running)
Run Code Online (Sandbox Code Playgroud)
暂停这些线程中的每一个,并检查它正忙于做什么:
Thread [<17> WebViewCoreThread] (Suspended)
Object.wait(long, int) line: not available [native method]
MessageQueue(Object).wait() line: 288
MessageQueue.next() line: 148
Looper.loop() line: 110
WebViewCore$WebCoreThread.run() line: 471
Thread.run() line: 1060
Thread [<25> CookieSyncManager] (Suspended)
Object.wait(long, int) line: not available [native method]
MessageQueue(Object).wait(long) line: 326
MessageQueue.next() line: 144
Looper.loop() line: 110
CookieSyncManager(WebSyncManager).run() line: 90
Thread.run() line: 1060 …Run Code Online (Sandbox Code Playgroud) 我有一个HTML5用户界面和一个Java后端,并希望避免在普通的java中重建HTML ui,所以我的想法是运行本地网络服务器并使用webview在"本机"窗口中呈现它.解决方案似乎是使用可以嵌入摇摆的JavaFX WebView.在纸上听起来很棒(特别是因为他们声称使用的是WebKit,它在Chrome/Safari中的UI性能明显更好).
它有效,但是:性能难以置信.在Chrome,Safari(甚至是速度较慢的Firefox)中,数量级比同样的速度慢.它几乎无法使用(我的UI大量使用JQuery/JS).顺便说一句,我正在使用这篇文章中的代码.
问题是:
任何人都可以介绍我的经验吗?我只是做错了什么或者这是由JavaFX引起的,因此"正常"?
更好的想法如何实现这一目标?我目前只是简单地启动系统浏览器,但它不是很好(看起来不像集成).
我有一个添加了javascript界面的webview,在大多数设备上都能正常运行,除了那些运行Android 4.2.1的设备.
我删除了大部分代码,并保留了一个非常基本的代码:
this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
public void handshake() {
Log.d("JS", "handshake no params");
}
public void handshake(String json) {
Log.d("JS", "handshake with params: " + json);
}
}, "Android");
Run Code Online (Sandbox Code Playgroud)
在javascript方面,测试代码如下所示:
Android.handshake();
Run Code Online (Sandbox Code Playgroud)
但是我在logcat中得到了这个:
E/Web控制台:未捕获TypeError:对象[对象对象]没有方法'握手'
同样,在我测试过的较旧的android os(<4.2.1)(最小版本为2.3.3)的设备中,这同样适用.
奇怪的是,如果我开始一个全新的项目,除了一个只有一个WebView的Activity,使用相同的代码,一切都可以正常工作,即使对于4.2.1,但当它是我的实际项目的一部分,事情中断.我正在使用的webview没有做任何事情,我提供的代码片段中没有包含这些内容.
对我来说最奇怪的是,javascript找到了Android对象,但它只是没有请求的方法(握手),怎么会这样呢?
任何帮助将不胜感激,因为这在过去的两周左右让我疯狂(这是一个我一直回去的错误,然后放弃等等).谢谢.
我搜索过,但我找不到答案.我正在使用HTML5和JavaScript开发基于webview的Android应用程序.我可以调用Android方法,例如makeToast()JavaScript吗?
我知道在这个论坛上已经以不同的格式提出了这个问题,但是到目前为止,没有一个答案 - 我接受或其他方式帮助了我.
我正在开发一个混合应用程序,它使用原生的Android,HTML和Adboe的Flex SDK(没有任何框架,如PhoneGap等,使用Android自己的WebView直接代码).
这是我面临的问题:
当应用程序启动时,首先触发flex sdk 的活动"AppEntry",它是一个空白活动,它只是设置flex SDK的上下文和初始设置.接下来,启动本机MainActivity,它使用WebView加载HTML项目.在Android 4.0.x(ICS)上,即使加载了URL,webview也会显示为空白(白色)(对于相关URL,已成功调用onPageFinished()).这是在第一次安装和启动应用程序时发生的,在停止应用程序后(通过从最近的应用程序栏中删除它),页面按预期加载.像这样重复重新启动有时会重现问题但频率不可预测.
有些事情需要考虑:
由于flex sdk约束,这些HTML文件不能直接存储在'/ assets'文件夹中,而是存储在assets文件夹中的目录结构中.
问题只发生在冰淇淋三明治上(我想知道的问题)!
我已经尝试过的东西:
2.
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setSupportMultipleWindows(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setLoadsImagesAutomatically(true);
settings.setDomStorageEnabled(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
settings.setSaveFormData(true);
settings.setAllowFileAccess(true);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
settings.setAllowContentAccess(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
settings.setAllowFileAccessFromFileURLs(true);
settings.setAllowUniversalAccessFromFileURLs(true);
}
}
settings.setAppCacheEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setLoadsImagesAutomatically(true);
boolean enableZoom = true;
settings.setBuiltInZoomControls(enableZoom);
settings.setSupportZoom(enableZoom);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) {
initializePluginAPI(webView);
}
settings.setDatabaseEnabled(true);
Run Code Online (Sandbox Code Playgroud)
问题是在Play商店中删除我的应用评论评论.任何帮助或见解将不胜感激.
apache-flex android webview android-webview android-4.0-ice-cream-sandwich
我有一个简单的WebView来显示一个带Flash的网站(Adobe Flash网站) - 在运行Android 3.0.1的Xoom平板电脑上测试新发布的Flash 10.2
在参考stackoverflow上的每个问题后,我设置了以下内容:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
mWebView.loadUrl("http://www.adobe.com/software/flash/about/");
Run Code Online (Sandbox Code Playgroud)
这两个插件和JavaScript的是对使用的WebView的getSettings()功能,但闪存未能露面.当我设置setPluginState到ON_DEMAND,它显示了对Flash的正确的占位符-又一次,当我点击其中的Flash应该是该项目时,闪光灯会消失(因为如果Flash视频无法呈现),只有音频(视可以听到Flash内容).
我还注意到我可以点击丢失的Flash,进行长按,然后点击左上角的新Flash'全屏'按钮应该是,然后它将在全屏模式下正确显示.但是当我回到WebView时,它再次无法显示并且只播放音频.
任何想法都表示赞赏!请不要仅仅回顾几个月之前发布的内容,而没有详细说明为什么我在Android 3.0发布前几个月提到了一个帖子!再次感谢任何帮助.伟大的社区!
在Android webview中加载移动网页和非移动网页的速度更快; 加载缓存还是根本不加载?
什么是推荐的加载方式?
现在,当我不在所有非移动站点加载缓存时,加载速度比在本机浏览器中加载缓存要慢得多.
我有这个代码,但不是因为它有效,它在webview中保持打开,我想要的是链接不属于我的网站在您的默认浏览器中打开.任何的想法?谢谢
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("message2space.es.vu")){
view.loadUrl(url);
return true;
}else{
return super.shouldOverrideUrlLoading(view, url);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个视图,并查看该网站有malito代码发送电子邮件.当我打开链接打开时出错.我想要在打开链接时打开Gmail应用或其他电子邮件应用.感谢所有帮助者.
public class teacher extends Activity implements OnClickListener {
WebView webView;
final Activity activity = this;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.teacher);
webView = (WebView) findViewById(R.id.webView145);
webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://dl.dropboxusercontent.com/u/233211/%D7%A8%D7%A9%D7%99%D7%95%D7%9F/iWebKit%20demo/ther.html");
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
if (progress == 100)
activity.setTitle(R.string.app_name);
} });
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// Handle the error
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { …Run Code Online (Sandbox Code Playgroud) 嗨,我正在开发一个应用程序,因为我正在使用Android WebView.每当我启动webview活动时,从test.txt文件加载字符串html格式的数据.test.txt文件包含近2.5 MB的数据,加载test.txt文件后,如果幻灯片屏幕结束,则读取所有数据并按回.然后,随后启动webview活动需要更多时间来呈现数据.在第一次推出webview时,它花费的时间很少.在启动此活动之间,我没有收到任何错误/异常/崩溃.
我使用的是Android API等级18及以上版本
注意:我在这个问题上做了很多研究.我尝试从Android webview的解决方案慢和Android WebView性能没有用.
我不能使android:hardwareAccelerated ="true" < - 为什么因为它有很多副作用(我仍然使用这个,但我没有在这个问题上发现任何变化).
我不能使用 webview.getSettings().setRenderPriority(RenderPriority.HIGH);
setRenderPriority() - >此方法在API级别18中已弃用.建议不要调整线程优先级,并且在将来的版本中不支持此方法.
我的DataLoader.java类
public class DataLoader extends Activity {
private WebView webView = null;
// Progress Dialog
private ProgressDialog progressDialog;
String dataContent = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);
webView = (WebView)findViewById(R.id.text);
// Loading webview in Background Thread
new LoadWebView().execute();
}
class LoadWebView extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() { …Run Code Online (Sandbox Code Playgroud) webview ×10
android ×9
javascript ×2
android-4.0-ice-cream-sandwich ×1
apache-flex ×1
browser ×1
caching ×1
external ×1
flash ×1
html5 ×1
hyperlink ×1
java ×1
javafx ×1
mailto ×1
performance ×1
swing ×1