2012-06-11 5 views
4

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> 
+1

요약하면 "내 앱이 정지되었습니다." 코드를 표시하거나 아무도 도움을 줄 수 없습니다. – borrrden

+0

HTML 페이지의 코드가 추가되었습니다. –

+0

왜 크래시 대신 앱이 멈출까요? 차이점은 무엇입니까? –

답변

0

을 시작해야 할 때마다 새로 고쳐 내 HTML 페이지의 코드 코드가 있지만 UI에서 다시 그리는 책임이있는 주 스레드에서 웹에서 비디오를로드하고 있기 때문에 얼어 버릴 것이라고 생각합니다. 스레드 내부에 큰 비디오를로드하면 UI도 고정됩니다.

동영상로드를 별도의 스레드로 이동하는 것이 좋습니다 (iOS5를 사용하는 경우 블록 사용).

+0

문제는 내가 OpenPlug를 사용하고있어서, C를 사용하여 iOS로 컴파일 된 중간 코드를 사용하기 때문에 관련 iOS 코드를 표시 할 수 없다는 것입니다. –

관련 문제