关于嵌在WEBVIEW中的网页游戏的载入优化研究

---------------------------------------------------故事开始-----------------------------------------------------------------------------------------

前端时间,实习公司里要做一个WEB_app  在安卓平台上,具体是什么就不细说了。

在APP中 ,几乎所有的页面都是网页 ,有WEBVIEW来显示的结构。

当中有一个画面是比较复杂的,有较多的动画和交互,原定是用原生安卓来开发这个页面,但是我作为没有工资的实习生,居然表示不服!你敢信?

我觉得应该也用WEB来做,以后做其他平台的时候也可以用,后来我抽了点时间做了一个简单的demo,使用游戏引擎实现的,

大家都知道最近白鹭游戏引擎十分的热,所以最后我是用COCOS2D-JS实现的这个DEMO.....不要问我为什么。

DEMO 做好后,公司的大佬都表示  很好!很好!流畅!漂亮!跨平台!

但是就是加载的时间太长,万一人家用2G网呢?半天打不开!商量下来,最后还是决定用原生android!!!你敢信?要让我用原生安卓做这个....

作为没有工资的实习生,我又表示不服!!我说这可以优化的,给我点时间我找找,大佬们表示:来不及,你小子快用原生安卓写吧!!

于是,作为没有工资的实习生,我屈服了....

但是我还是花时间找了,看看能不能把庞大引擎的文件 直接放在ANDROID 本地,其实也不大...

网上的资料不多,最终还是弄出来了,跟大家分享

-------------------------------------------故事结束-------------------------------------------------------------------------------------------

主要思路  使用ContentProvider 共享手机中的文件  让网页访问androidSD卡中的内容

先把网页要用的JS  CSS 图片音频什么的 都放到手机的SD下面(用程序里面代码放啊,不是把用户的手机抢过来放!)

目录:SD卡:/html/a.png

import java.io.File;
import java.io.FileNotFoundException;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.util.Log;

public class cctt extends ContentProvider {

	private  static final String URI_PREFIX = "content://darkzone.game.zed.yang";

	@Override
    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
        Log.e("path1:", uri.getPath());
        File file = new File(uri.getPath());
        ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
        return parcel;  

    }

    @Override
    public AssetFileDescriptor openAssetFile (Uri uri, String mode) throws FileNotFoundException{
        AssetManager am = getContext().getAssets();
        String path = uri.getPath().substring(1);
        Log.e("path:", path);  

        String tpath = "/sdcard/html/"+path;
        File file = new File(tpath);
        if (file.exists()) {
            Log.e("path2:", tpath);
            Uri turi = Uri.parse(URI_PREFIX+tpath);
            return super.openAssetFile(turi, mode);
        }  

        return super.openAssetFile(uri, mode);
    }  

	@Override
	public boolean onCreate() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getType(Uri uri) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		// TODO Auto-generated method stub
		return 0;
	}

}

网页中这样写:

<html>
<head>

<script type="text/javascript" src="content://darkzone.game.zed.yang/sdcard/html/a.js"></script>
</head>
<body>
<img src="content://darkzone.game.zed.yang/sdcard/html/a.png" />
<script>
a('aaa');

</script>
</body>

</html>

在AndroidManifest.xml中还需要加入

<provider android:name="cctt" android:authorities="darkzone.game.zed.yang"></provider>

这样网页就会使用SD卡里面的资源

欢迎留言..虽然从来没人留言......

欢迎光顾我自己搞的小窝DarkZone 虽然没有做完,开发也停滞了,最近没空,人也浮躁,收收心再出发。

点击进入DarkZone 暗域游戏

转载请注明 出处 谢谢大家:http://blog.csdn.net/ycd_harry/article/details/42237797

时间: 2024-11-08 01:57:47

关于嵌在WEBVIEW中的网页游戏的载入优化研究的相关文章

在webview中打开网页,不跳出

木啥说的. package com.example.deemo; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebView; import a

WebView中取网页的一些内容

经常在iOS开发中会碰到取网页中的一些数据的问题,比如取这个网页的标题,特定标签的内容等等,一般有2种做法: 1)如果页面是符合DOM结构的,可以直接取,使用UIWebView的 stringByEvaluatingJavaScriptFromString方法即可,如果取标题直接使用DOM的方法: [WebViewObj stringByEvaluatingJavaScriptFromString:@"document.title"]; 就可以了. 2)取整个页面这个大字符串的中间某个

非微信内置浏览器中的网页调起微信支付的方案研究

问题来源 之前在app中集成过微信支付,当时还写了一篇扫坑贴,此种微信支付方式为app支付,即在我们自己的应用中嵌入微信支付SDK,由Native代码调起微信支付. 后来由于业务需要在我们app的WebView中打开第三方店铺的网页,在第三方网页中有微信支付按钮,测试反馈说ios可以调起微信支付,而android不可以.后来网上看到说微信内置Webview和京东的网页也可以调起微信支付,微信自己没什么奇怪的,而京东可以的话,如果它跟微信没什么合作协议的话,那么其他app应该也可以在网页中调用微信

Android WebView中的JavaScript代码使用(转载)

转载来源:http://www.cnblogs.com/mengdd/archive/2013/03/02/2940185.html 本篇文章主要介绍WebView中的JavaScript代码的执行相关,已经JS代码与Android代码的互相调用. (因为本人对Web开发并不是很熟悉,所以如果有哪些地方说得不对,还请指正.) 在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己

Android中webview加载网页无法点击或滚动

由于工作忙,很久没写博客了,今天就先来一篇吧,这也是项目中遇到的问题. 如题,webview加载网页,但是网页内容无法滚动和点击,且网页内容也没有正常全部展示,主要是因为没有正确setting而已,解决访求如下: WebSettings s = webview.getSettings(); s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); s.setUseWideViewPort(true); s.setLoadW

使用WebView在应用程序中打开网页

如果想在应用程序里展示一些网页,在自己的应用程序里嵌入一个浏览器,可以借助WebView控件调用loadUrl()方法加载显示 对应的网页. webView = (WebView) findViewById(R.id.web_view); webView.loadUrl("http://www.baidu.com"); 这时可能还会直接跳转到系统浏览器,需要重写shouldOverrideUrlLoading()方法,在webview中实现跳转. webView.setWebViewC

在当前的webview中跳转到新的url 使用WebView组件显示网页

如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接.给WebView加一个事件监听对象(WebViewClient)并重写其中的一些方法:shouldOverrideUrlLoading:对网页中超链接按钮的响应.当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url. webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverri

Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie

最近做项目在手机端登录Http请求和 WebView 记载登录获取Cookie信息,可查看Cookie信息. 如图: Http请求获取Cookie信息: public static String request(String httpUrl, String params, Context context) { BufferedReader reader = null; String result = null; String httpurl = " http://xwwscs.com"

WebView中的视频全屏的相关操作

最近工作中,基本一直在用WebView,今天就把它整理下: WebView 顾名思义,就是放一个网页,一个看起来十分简单,但是用起来不是那么简单的控件. 首先你肯定要定义,初始化一个webview,其实网上的例子很多,我这里就简单的把一些WebView 中可能会用到的的很重要的属性以及支持全屏播放视频该怎么实现的代码粘出来,直接放到项目中去就行了 <span style="white-space:pre"></span><pre name="co