OpenPlug라는 타사 도구를 사용하여 iPad 응용 프로그램을 개발했습니다. AS3을 C++로 변환하고 iOS로 내 보냅니다. (내가 작성한 XCode에서 Obj-C를 사용하는 "네이티브"앱이 아니라는 것을 알고 싶었다. AS3을 썼다.)iOS 앱이 정지되고 webview에서 비디오를로드 할 때 충돌이 발생하지 않습니다.
이제 사진과 비디오를 슬라이드 쇼에 표시하는이 iPad 애플리케이션이있다. 비디오의 경우 WebView를 사용하여 비디오 페이지의 src 속성을 응용 프로그램 저장소로 다운로드 한 비디오 파일의 위치로 변경하는 HTML 페이지를로드합니다. 몇 시간 (3-6) 동안 실행 중일 때 응용 프로그램이 정지되는 것을 제외하고는 정상적으로 작동합니다.
이 문제를 검색하고 iOS Safari memory leak when loading/unloading HTML5 <video>에서 해결책을 시도했지만 저를 위해 아무것도 변경하지 않는 것 같습니다.
HTML 페이지가 비디오를로드해야하기 직전에 응용 프로그램이 멈추고 그 의미가 무너지기 때문에? 비디오 객체를 파괴해야합니까? 처음에는 각 비디오에 대해 새로운 WebView를 만들었지 만 이제는 webview를 재사용하고 src 속성을 변경하지만 저 또한 도움이되지 않습니다.
누구든지이 문제에 대해 의견을 개진 할 수 있습니까? OpenPlug는 서비스를 중단하고 더 이상 지원을 제공하지 않지만 그럼에도 불구하고 iPad에서 웹보기/비디오 문제가 더 많이 발생한다고 생각합니다 (
)중요 사항 : 응용 프로그램이 정지되었지만 iPad가 아닙니다. 응용 프로그램은 충돌 보고서를 생성하지 않으며 더 이상 코드를 실행하지 않습니다 (흔적도 없음). 내 iPad에서 홈 버튼을 누르고 응용 프로그램 아이콘을 누르면 응용 프로그램이 다시 시작됩니다. 여기
새로운 비디오는 전체를 게시하려는 경우 그것은 도움이 될 것입니다 (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>
요약하면 "내 앱이 정지되었습니다." 코드를 표시하거나 아무도 도움을 줄 수 없습니다. – borrrden
HTML 페이지의 코드가 추가되었습니다. –
왜 크래시 대신 앱이 멈출까요? 차이점은 무엇입니까? –