我有一个iPad应用程序,使用第三方工具OpenPlug开发,将AS3转换为C ++ 并从那里导出到iOS。 (只是想指出,这不是由我编写的Obj-C在XCode中使用的“本机”应用程序,我编写了AS3)
现在我有这个iPad应用程序,可以在幻灯片中显示图片和视频。对于视频,我使用WebView加载HTML页面,在其中更改视频对象的src属性以指向下载到我的应用程序存储的视频文件位置。这很好地运行,但当它运行几个小时(3-6)时,应用程序会冻结。
我搜索了这个问题,并尝试了iOS Safari memory leak when loading/unloading HTML5 <video> 中的解决方案,但似乎没有改变任何东西。
由于应用程序在冻结之前需要加载视频的HTML页面,而且没有崩溃,那是什么意思? 我需要销毁视频对象吗?起初,我为每个视频创建新的WebView,但现在我正在重复使用webview并只更改src属性,但也无法帮助我。
有人能够阐明一下吗? OpenPlug已终止其服务并不再提供任何支持,但我认为这更像是iPad上的Webview / video问题(?)
需要注意的重要事项:应用程序冻结但我的iPad没有。该应用程序不生成崩溃报告,也不再执行任何代码(也没有跟踪)。当我按下iPad上的主页按钮并按下应用程序图标时,应用程序将重新启动。
这是我的HTML页面代码,每次需要启动新视频时都会刷新它(webview.location = ...)
现在我有这个iPad应用程序,可以在幻灯片中显示图片和视频。对于视频,我使用WebView加载HTML页面,在其中更改视频对象的src属性以指向下载到我的应用程序存储的视频文件位置。这很好地运行,但当它运行几个小时(3-6)时,应用程序会冻结。
我搜索了这个问题,并尝试了iOS Safari memory leak when loading/unloading HTML5 <video> 中的解决方案,但似乎没有改变任何东西。
由于应用程序在冻结之前需要加载视频的HTML页面,而且没有崩溃,那是什么意思? 我需要销毁视频对象吗?起初,我为每个视频创建新的WebView,但现在我正在重复使用webview并只更改src属性,但也无法帮助我。
有人能够阐明一下吗? OpenPlug已终止其服务并不再提供任何支持,但我认为这更像是iPad上的Webview / video问题(?)
需要注意的重要事项:应用程序冻结但我的iPad没有。该应用程序不生成崩溃报告,也不再执行任何代码(也没有跟踪)。当我按下iPad上的主页按钮并按下应用程序图标时,应用程序将重新启动。
这是我的HTML页面代码,每次需要启动新视频时都会刷新它(webview.location = ...)
<html>
<head>
<script>
function videoEndedHandler(){
var video = document.getElementById("videoPlayer");
video.src = "";
video.load();
window.location.hash = "ended";
}
function videoErrorHandler(){
window.location.hash = "error";
var video = document.getElementById("videoPlayer");
video.src = "";
video.load();
}
var loop;
function setup(){
var video = document.getElementById("videoPlayer");
video.addEventListener("error", videoErrorHandler,false);
video.addEventListener("ended", videoEndedHandler,false);
video.load();
video.play();
startHashLoop();
}
function startHashLoop(){
if(window.location.hash == "#touched"){
setAsPaused();
}
if(window.location.hash == "#paused"){
//check image
testImage("shouldResume.png?nocache=" + Math.random());
}
if(window.location.hash == "#resume"){
var video = document.getElementById("videoPlayer");
video.play();
}
loop = setTimeout(hashLoop,500);
}
function testImage(url) {
var img = new Image;
img.addEventListener("load",isGood);
img.addEventListener("error",isBad);
img.src = url;
}
function isGood() {
window.location.hash = "resume";
}
function isBad() {
//alert("Image does not exist");
}
function hashLoop(){
startHashLoop();
}
function setAsTouched(){
window.location.hash = "touched";
}
function setAsPaused(){
var video = document.getElementById("videoPlayer");
video.pause();
window.location.hash = "paused";
}
</script>
</head>
<body onload="setup();" style="background-color:#000000;">
<a href="javascript:setAsTouched()" style="top:0;left:0;position:absolute;z-index:1;color:#FF0000;border:0px solid red;width:100%;height:100%;display:block;"></a>
<video id="videoPlayer" style="top:0;left:0;position:absolute;" width="100%" height="100%" preload="auto" src="##VIDEO_URL##" autoplay="autoplay" webkit-playsinline />
</body>
</html>