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

来源:互联网 发布:光纤宽带软件 编辑:程序博客网 时间:2024/05/29 07:24
---------------------------------------------------故事开始-----------------------------------------------------------------------------------------

前端时间,实习公司里要做一个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);      }  @Overridepublic boolean onCreate() {// TODO Auto-generated method stubreturn false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubreturn null;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubreturn null;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubreturn 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


1 0