思考一个问题 : 为什么要使用WebView ?
有两个好处: 兼容已有的项目,可以动态更新
由此又引出一个问题:既然WebView 这么好用, 为什么还要原生开发?
原因: 1 耗电量
2 加载速度慢,这是一个重要的原因, 网页的各种元素加载 比 纯原生组件加载 要慢得多
3 对访问硬件支持弱
WebView 的loadUrl() 可以加载html页面, jsp页面
=========================================
本文介绍下 WebView 自定义的url拦截问题, 示例需要服务器端, Android客户端 两边的代码,配合运行.
第一步 在 JavaWeb服务端 定义一个 startActivity.jsp页面, 这里有一个链接指向一个url, 实际上指向自身startActivity.jsp也可以,
启动服务端程序;
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>startActivity</title>
</head>
<body>
<center><a style="font-size:50px;" href="http://www.shenwud.com/jpush/">load page</a></center>
</body>
</html>
第二步 创建一个Android示例, 创建2个Activity: MainActivity, TargetActivity, 在MainActivity中, 编写以下代码
public class MainActivity extends Activity {
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
wv = (WebView)findViewById(R.id.wv);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl("http://www.shenwud.com/jpush/startActivity.jsp");
wv.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.endsWith("jpush/")){
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
startActivity(intent);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
}
}
TargetActivity很简单:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.target);
}