2014-06-06 22 views
5

Mam pobrać 100 obrazów przechowywać w katalogu danych aplikacji jego działa dobrze , ale mam pobrać więcej zdjęć, a następnie rosną problem rozmiar sterty przychodzi i aplikacja jest zamknięta. Mam usunąć wszystkie obiekty, wartość obiektów definiują wartość null i okno jest również zamknięte ale wynik jest taki sam.jak usunąć rosnący rozmiar sterty w aplikacji tytanowej w systemie Android?

BŁĄD: rosną sterty (przypadek frag) do 14.687MB alokacji 517197 bajtów

jak w rdzeniu android System.gc(); Więc jaka jest opcja tytanu

+0

można podać kod? – 0101

Odpowiedz

0

O ile wiem, nie masz kontroli nad zbieraniem śmieci. Interpreter JavaScript wykonuje to za Ciebie.

Zrobiłem coś podobnego w projekcie (pobieranie wielu obrazów), a także napotkano problemy z pamięcią. Najbardziej optymalnym rozwiązaniem, które znalazłem, jest to, aby umożliwić zbieranie śmieci. Powodem tego jest to, że interpreter JavaScript wykonuje twój kod, a jeśli przejrzysz wszystkie obrazy i pobierzesz je, może nie zabrać się do zbierania śmieci, zanim skończysz pobieranie. Oznacza to, że wszystkie tymczasowe obrazy pozostaną w pamięci.

Aby rozwiązać ten problem, należy użyć metody defer - metody underscore.js lub funkcji setTimeout. W sensie, co robią, jest to, że mówią tłumaczowi, że jest w porządku, aby uruchomić inne rzeczy przed tym, np. zbieranie śmieci.

Ten przykładowy kod (używając underscore.js) powinno dać ogólne pojęcie:

var images = [...many entries here...]; 

function downloadImage(index) { 
    //Make sure the index is valid 
    if(index < images.length) { 
    var httpClient = Ti.Network.createHttpClient({ 
     onload: function() { 
     //Save the image to the filesystem. 
     _defer.(downloadImage, ++index); //Download the next image. 
     } 
    }); 

    //Run the HttpClient here. 
    } 
} 

_.defer(downloadImage, 0); //Start the download sequence. 

Istnieją również pewne znaczniki, które można ustawić w pliku tiapp.xml, ale z mojego doświadczenia wynika, że ​​don” t dużo pomóc.


Te trzy teksty na "Utrzymanie odpowiedź APP" wyjaśnić punkt próbuję zrobić całkiem dobrze:

  1. Part 1: The problem
  2. Part 2: The reason
  3. Part 3: The solution
2

dlaczego nie użyć android:largeHeap="true"

<android xmlns:android="http://schemas.android.com/apk/res/android"> 
<manifest> 
    <application android:largeHeap="true"/> 
</manifest> 

odczytu tytanu oficjalny doc here

+0

Jest to jeden z tagów, o których myślałem, wspominając o tym w moich odpowiedziach. Jak już powiedziałem, nie robi to wiele dobrego z mojego doświadczenia. – kaspermoerch

+0

Znalazłem ten tag pomocny, zarówno w języku natywnym, jak i tytanie –