我正在用 javascript 编写游戏。这个应用程序在我的浏览器上运行良好(快速),但我在使用 android webview 运行它时遇到了一些麻烦。
- 启动应用程序的时间需要 5 秒或更长时间(我认为这有点慢,但也许这很正常?)
在游戏的菜单中,我有一个方法,例如:
this.showCredits = function() { document.getElementById('core-credits-layer').style.display = 'block'; document.getElementById('core-credits').style.display = 'block'; var parent = this; $.ajax({ url: 'content/credits.html', dataType: 'html', success: function(data, status, response) { var now = new Date(); var s = now.getSeconds()-parent.test.getSeconds(); console.log('success ajax: '+s); document.getElementById('core-credits').scrollTop = 0; document.getElementById('core-credits').innerHTML = response.responseText; console.log('finished'); }, error: function() { console.error('failed fetch credits'); } }); }
因此,控制台日志(“完成”,success() 中的最后一行)在单击菜单“credits”后立即出现。但在我看到 div #core-credits 之前可能需要 6 秒(或多或少)。在我的浏览器中,单击后我会立即看到#core-credits。但是第二次点击那个菜单点我在 1-2 秒后得到了 div。我现在不知道那是什么,我不这么认为,这是一个缓存的事情,因为我很快就进入了 success() 回调。
Java端:
public void onCreate(Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Context context = this.getApplicationContext();
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if(isFirstRun) {
this.copyAudioFiles(context);
}
WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
String data = context.getFilesDir().getPath();
mWebView.getSettings().setDatabasePath(data+"data/"+this.getPackageName()+"/databases/");
mWebView.getSettings().setAllowFileAccess(true);
mWebView.setWebChromeClient(new WebChromeClient());
String data_root = Environment.getExternalStorageDirectory()+"/"
+this.getPackageName();
mWebView.loadUrl("file:///android_asset/www/index.html?system=android&" +
"data_root="+data_root);
}
我在 Eclipse 中的虚拟平板电脑设备和真正的华硕平板电脑上都有这个性能问题。
动画(jquery show('slow'))有时真的很慢或损坏。例如(这是一款纸牌游戏),玩家通过 show('slow') 动画变成 9 张牌,每 2 次或第 3 次我得到 3 或 8 张牌,但不是 9^^。
以上所有这些都在 chromium 或 firefox 等浏览器上运行良好。我正在使用 Android 4.1。
激活硬件加速没有帮助。有很多关于 webview 渲染问题的帖子,但只有硬件加速解决方案没有帮助。