安卓webview

第一种加载方法webView.loadurl()

第一式
 webView.loadUrl("https://www.baidu.com/");
public class WebViewActivity extends AppCompatActivity {
private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        webView=findViewById(R.id.webView);
        webView.loadUrl("https://www.baidu.com");
        webView.setWebViewClient(new WebViewClient());
    }
}
第二式

去访问手机里面的sd卡中的文件

  webView.loadUrl("file://"+ Environment.getExternalStorageDirectory().getPath()+"/1/index.html");
第三式

去访问安卓资源

   webView.loadUrl("file:///android_asset/index.html");

第二种加载方法webView.loadurl(+map<>)

 webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                Map<String,String>reqHeader=new HashMap<>();
                reqHeader.put("android-webview-demo","textRequest");
                webView.loadUrl("http://172.26.48.1:8080",reqHeader);

                return super.shouldOverrideUrlLoading(view, request);
            }
        });

放入请求头部

第三种加载方法 webView.loadData()

 webView.loadData("<h1>Hello World</h1>","text/html","utf-8");

打印出HelloWorld

第四种加载方法 webView.loadData()

 webView.loadDataWithBaseURL("http://www.imooc.com","<img src=\"/static/img/index/logo.png\"/>","text/html","utf-80",null);

基于地址去加载东西在这里插入图片描述

histroyurl 就表示按后退键会退到哪个网址上

webview的生命周期

 @Override
    protected void onPause() {
        super.onPause();
        //停止webview
        webView.onPause();
        //停止所有webview
        webView.pauseTimers();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //开始webview
        webView.onResume();
        //开始所有webview
        webView.resumeTimers();

    }

不及时停止可能造成内存泄漏

WebSetting类

在这里插入图片描述
支持js

 WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);

支持缩放

//支持缩放
  settings.setSupportZoom(true);
  //支持网页内置原生缩放工具
        settings.setBuiltInZoomControls(true);
   支持安卓原生缩放工具
        settings.setDisplayZoomControls(true);

webseting的缓存操作setCacheMode()

在这里插入图片描述

WebviewClient类

在这里插入图片描述
反正 shouldInterceptRequest 肯定在onLoadResource之前

在这里插入图片描述
onpagestart和shouldInterceptRequest不一定

shouldInterceptRequest返回为空时候是webview自己去处理 如果我们想要处理就

            @Nullable
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                String url = request.getUrl().toString();

                WebResourceResponse webResourceResponse = super.shouldInterceptRequest(view, request);
                if ("http://www.baodu.com".equals(url)){
                    return new WebResourceResponse("text/html","utf-8",null);
                }
                return webResourceResponse;
            }

webclient处理网页加载时的回调的方法

在这里插入图片描述

WebChromeClient

告诉宿主应用程序加载页的当前进度。

 public void onProgressChanged(WebView view, int newProgress) {}

将文档标题的更改通知宿主应用程序。

public void onReceivedTitle(WebView view, String title) {}

通知宿主应用程序当前页的新favicon。

 public void onReceivedIcon(WebView view, Bitmap icon) {}
<think>好的,用户想了解Android WebView的使用方法或解决常见问题。首先我需要整理一下用户提供的引用内容,看看里面有哪些有用的信息。引用[1]提到WebView的使用教程、与JS交互、缓存机制等,这可能是一个综合性的指南。引用[2]讨论了WebView默认GONE的问题和设计优雅WebView的方法,这可能涉及视图可见性和内存管理。引用[3]和[4]都提到了在代码中动态创建WebView并传入Application Context来避免内存泄漏,这应该是解决内存泄漏问题的关键。引用[5]则涉及与JS的交互,比如启用JavaScript和添加接口。 接下来,用户的问题可能包括如何初始化WebView、加载网页、处理JS交互、解决内存泄漏、处理页面缓存以及调试WebView内容。我需要按照逻辑步骤来组织这些内容,确保每个部分都有对应的解决方案和代码示例。例如,初始化WebView时,要注意在XML中声明或者在代码中动态创建,同时使用Application Context来避免内存泄漏。加载网页时,使用loadUrl方法,并处理页面导航。JS交互部分需要启用JavaScript设置并添加接口。内存泄漏的问题可以通过正确使用Context和销毁WebView来解决。缓存机制方面,可能需要配置缓存模式和清除缓存的方法。最后,调试可以使用Chrome DevTools。 需要注意的是,引用中的示例代码可能存在拼写错误,比如引用[3]中的webFrameLayout是否应为某个具体的布局容器?不过用户可能只是需要示例代码的结构,所以保持代码简洁正确即可。另外,要确保所有行内公式和独立公式使用正确的LaTeX格式,不过在这个问题中可能用不上数学公式,所以可以忽略。最后,生成的相关问题要围绕WebView的常见使用和问题,比如性能优化、内存泄漏处理、缓存配置等。</think>### Android WebView 使用教程及常见问题解决 #### 一、基础使用 1. **初始化WebView** - 在XML布局中声明: ```xml <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` - 或在代码中动态创建(避免内存泄漏): ```java WebView webView = new WebView(getApplicationContext()); // 使用应用上下文[^3][^4] ``` 2. **加载网页** ```java webView.loadUrl("https://www.example.com"); // 支持前进/后退导航 webView.goBack(); webView.goForward(); ``` 3. **启用JavaScript交互** ```java WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); webView.addJavascriptInterface(new JsInterface(), "androidBridge"); // 注册JS调用接口[^5] ``` #### 二、常见问题解决方案 1. **内存泄漏问题** - **错误现象**:Activity销毁后WebView仍持有引用 - **解决方案**: ```java @Override protected void onDestroy() { if (webView != null) { webView.stopLoading(); webView.destroy(); } super.onDestroy(); } ``` 动态创建时使用`getApplicationContext()`代替Activity上下文[^3] 2. **页面白屏/加载失败** - 检查网络权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` - 添加错误处理: ```java webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // 显示错误页面 } }); ``` 3. **与JavaScript交互** - Android调用JS: ```java webView.evaluateJavascript("javascript:updateUI('"+data+"')", null); ``` - JS调用Android(需添加@JavascriptInterface注解): ```java public class JsInterface { @JavascriptInterface public void closeWebview() { finish(); // 例如关闭页面[^5] } } ``` 4. **缓存优化** ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 优先使用缓存 // 清除缓存 webView.clearCache(true); ``` #### 三、进阶调试 1. **开启WebView调试** ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } ``` 通过Chrome浏览器访问`chrome://inspect`调试页面[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值