关于嵌在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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。