2010-08-15 117 views
6

我已經嘗試了幾種使用Phonegap製作單頁原生應用程序的方法,並且正在尋求有關故障排除的一般性建議。內存警告/使用PhoneGap iPad應用程序崩潰

第一種方法: 它基本上是一堆裝用jQuery到生活在其中的索引頁的容器不同的頁面和子頁面。因此,不加載頁面,只需使用.load()將頁面中的頁面加載到外殼中。

第二種方法: 我做了一個頁面的HTML頁面的所有內容,然後顯示和隱藏,基於類的導航項目的匹配內容容器的標識。

這兩種方法都可以很好地機械地工作。問題似乎在於,我的所有子頁面都有一個畫廊或2-6張圖片(因此,我總共使用了超過215張圖片,660 x 440),因此我使用了jquery循環,並且Touchwipe可以用手勢啓動滾動。畫廊運行良好,但在瀏覽大約35個畫廊後,應用程序始終收到1級存儲警告,然後是2級,然後崩潰。我在儀器中的內存使用情況看起來不錯... ajax加載的分片版本保留大約2兆字節的實時字節,一頁分頁器保持在5兆字節左右。畫廊是由div中的CSS背景圖片組成的,因爲這看起來比標籤表現更好。

我沒有看到任何內存泄漏,或內存警告之外的任何其他問題。我有點困擾如何跟蹤這個。我已經完成了反覆試驗和錯誤的處理。已經將JavaScript降低到最基本的要求。隨着時間的推移,似乎正在增加。

關於如何弄清楚發生了什麼的任何想法?是否有一些第一方法來確保沒有任何事情發生與JavaScript導致某種類型的內存泄漏?

除了在iPad上,整件事情運行得非常好,這非常令人沮喪。

我的下一個策略可能是嘗試將圖庫背景圖像重寫爲空白gif,當他們不使用。

這裏是我使用的一個尋呼機代碼:

$(document).ready(function(){ 

    document.addEventListener('touchmove', function(e){ e.preventDefault(); }); 

    $('div#mainpages > div').hide(); 

    $("ul#mainnav li").click(function() { 
     $("#mainpages > div").hide(); 
     var navClass = $(this).attr('class'); 
     var target='#'+navClass; 
     $(target).show(); 
     $('[id^=subpages] > div').hide(); 
     $(target).find('[id^=subpages_] div:first').show(); 
    }); 


    $('[id^=subnav] li').click(function() { 

     $('[id^=subnav_] li').removeClass('current'); 
     $('[id^=subpages_] > div').hide(); 

     var subnavClass = $(this).attr('class'); 
     var subtargeted='#'+subnavClass; 
     $(subtargeted).show(); 

     $(this).addClass('current'); 

     $(subtargeted+' .gallery_div_shell').cycle({ 
      timeout: 0, 
      speed: 700, 
      speedIn: 300, 
      speedOut: 300, 
      fx: 'scrollHorz' 
     }); 

     $(subtargeted+' .gallery_div_shell').touchwipe({ 
      wipeLeft: function() { 
       $('.gallery_div_shell').cycle("next"); 
      }, 
      wipeRight: function() { 
       $('.gallery_div_shell').cycle("prev"); 
      } 
     }); 
    }); 
}); 

感謝您的任何意見,我拉我的頭髮。

回答

1

乍一看我沒有看到任何錯誤。您可以嘗試,當你打開下一個明確破壞了jQuery週期畫廊,看看是否有幫助

$(youridentifier).cycle('destroy'); 
+0

謝謝你看看,我也試過了。我首先在當前圖庫中添加了一個類,類似於「.active_gallery」,然後在導航的點擊事件中首先專門銷燬該特定的「循環」圖庫,然後在通過設置新的當前週期畫廊。還沒有任何運氣。無論如何,在滑過35家畫廊之後,它開始獲得記憶警告。 使用ajax加載應用程序,即使在破壞循環庫,刪除「擦除」處理程序等後,我也能得到相同的結果。 – Transoptic 2010-08-15 15:08:02

2

我認爲這個問題是不相關的JavaScript的,但涉及到圖像的WebKit的金額能夠主動維護記憶。這似乎與此相關的問題:Crashing when loading images

我的解決辦法是使用的有提到事物的組合。首先,我爲我的畫廊使用帶有背景圖片的div。其次,我開始將所有背景圖像設置爲空白GIF。當我展示一個小節並激活一個畫廊時,我使用jquery將css背景圖像重寫爲實際的圖像源,然後當我點擊一個新的子鏈接時,我將它重置爲使用空白的GIF。這似乎使「active」div背景圖像的數量一直保持在3-7,除了gfx接口。與此同時,另外200多個在畫廊中有背景圖像的div(反正也沒有顯示)只是一個空白的gif。

我認爲這個問題通常與UIWebview中的限制相關,而不是PhoneGap或jQuery的特定內容。我不確定這是否是最終的解決方案,但我可以在不崩潰的情況下運行應用程序,而且我的活動字節在分配工具中始終保持在1.3兆左右。

相關問題