gpt4 book ai didi

android - 如何从 UI 线程获取 WebView.getTitle()?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:40:59 25 4
gpt4 key购买 nike

WebView 的子类中,我曾经在 getTitle() 的重写方法中包含这一行:

String title = super.getTitle();

它在 Android 的所有版本中都运行良好,直到我在 Android 4.1 手机上测试我的应用程序,它在 super 上给了我这个警告.getTitle() 行:

12-20 21:38:27.467: W/webview_proxy(2537): java.lang.Throwable: Warning: A WebView method was called on thread 'WebViewCoreThread'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads.

所以,我正在考虑通过 runOnUiThread() 传递它来解决这个新法令:

Activity a = this.getActivity();
a.runOnUiThread(new Runnable() {
public void run() {
String title = super.getTitle();
}
});

但这段代码甚至无法编译,因为 super 不再引用 WebView,而是引用 Activity

知道如何从 UI 线程 super.getTitle() 吗? (具有上述约束,在 WebView 的子类的 getTitle() 中)

最佳答案

Morgan's answer ,虽然它可能会修复编译错误,但并不是真正解决此问题的方法。

首先,它不会将对 getTitle() 的调用更改为不同的线程。这个根本问题就是为什么 Android 在运行时给你错误。

你在评论中说

The circumstances are that I am calling it in WebViewClient.onPageFinished(), which happens not to be on the UI thread.

可能是个问题。如果您从 UI 线程启动 Web 请求,那么 onPageFinished() 肯定会在 UI 线程上被回调。你能解释一下你是如何开始网络请求的吗?为什么你要那样做?绝大多数时候,您不应该看到后台调用了 onPageFinished(),因此您可能在其他地方遇到了问题。

(注意:如果您认为需要在后台调用WebView.loadUrl()以避免阻塞UI,请see this other answer on that issue)

如果你真的认为你需要在后台启动网络请求,并且你看到后台调用了onPageFinished(),你需要注意调用getTitle() 在 UI 线程上。

此外,如果您从 onPageFinished() 方法调用它,则无需使用如下语法:

String title = MyWebView.this.getTitle();

在那个方法中,你被传递给你的 WebView 的实例,所以直接使用它:

public void onPageFinished (WebView view, String url) {
String title = view.getTitle();
}

但是,正如我所说,这并没有解决线程问题。您需要向我们展示为什么您尝试在该方法中使用页面标题,但是一种安全使用它的方法是这样的:

public void onPageFinished (final WebView view, String url) {
view.post(new Runnable() {
public void run() {
String title = view.getTitle();
// do something with title that affects the UI here
}
});
}

请注意,我需要在上面的代码中将view 参数设置为final

关于android - 如何从 UI 线程获取 WebView.getTitle()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com