关于嵌在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 虽然没有做完,开发也停滞了,最近没空,人也浮躁,收收心再出发。
转载请注明 出处 谢谢大家:http://blog.csdn.net/ycd_harry/article/details/42237797
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。