2013-07-26 13 views
9

Wydaje mi się, że wszyscy doświadczyli jego aplikacji działa świetnie, gdy próbujesz go przez szybkie 30 minut. Ale gdy aplikacja jest umieszczona w tle urządzenia na dzień lub mniej, otrzymujesz swój NullPointerExceptions, a rzeczy nie działają zgodnie z oczekiwaniami, ponieważ Garbage Collector ukradł twoje rzeczy. Czy istnieje sposób symulacji aplikacji działającej przez długi czas w tle?Android: symulacja długiego czasu pracy

+0

Co otrzymujesz "Wyjątek NullPointerException"? – andy256

Odpowiedz

0

Nie musisz czekać przez określony czas. Trzeba tylko zrobić coś, co pożera pamięć. Może to być specjalna aplikacja tworzona dla zadania, ale tak naprawdę nie musisz.

Z mojego doświadczenia większość gier wydaje się działać. Gry z dużą ilością grafiki działają najlepiej, ponieważ zużywają dużo pamięci na tekstury itp. Angry Birds lub Candy Crush będą działać również, mimo że nie ma zaawansowanej grafiki lub ciężkiego przetwarzania (prawdopodobnie dla z tego samego powodu, dla którego żują baterię). Normalnie, po zagraniu na poziomie, możesz wrócić do swojej aktywności i zobaczyć, co zgubiłeś.

Optymalnie, będziesz używać inteligentnych sposobów utrzymywania/inicjowania danych, więc nie powinno to stanowić większego problemu, ale czasami Ty (lub użytkownik) napotykasz na coś nieoczekiwanego, a to może ci pomóc śledzić to.

4

Ustawienia -> Opcje programistyczne -> Limit procesu w tle -> Co najwyżej 1 proces.

Nie zapomnij go przywrócić, gdy skończysz dobrze się bawić. Twoje zdrowie.

+0

Nie ma czegoś takiego jak uśpienie. Jeśli przez uśpienie, masz na myśli nadal w pamięci RAM, stan wstrzymania, to nie ma sensu, aby przetestować go po 30 minutach, jeśli nadal jest w pamięci RAM. Wszystko będzie takie samo. GC dotyczy tylko obiektów, które nie są już przywoływane. Zatem sam GC nie wpłynie na nic. Co * wpłynie jednak na cykl życia aplikacji, to odtworzenie czynności lub fragmentów, które można przetestować za pomocą powyższej metody. –

+0

Znowu GC będzie zbierać obiekty nieodniesione, nawet gdy aktywność jest na pierwszym planie, nie wątpiłem w to wcale. To * nie * będzie jednak zbierać przywoływanych obiektów w ogóle, w żadnym z nich. Ponieważ obiekty, których używasz w działaniu, są hostowane * wewnątrz * tej aktywności, to referencja się sprawdza. Jeśli wiesz, że jest to coś przeciwnego, prześlij referencje. Jednak w ogóle nie natknąłem się na to, co opisujesz. –

+0

From Dev SDK: "Po zatrzymaniu aktywności obiekt Activity jest przechowywany w pamięci i jest wywoływany po wznowieniu działania. Nie trzeba ponownie inicjować komponentów, które zostały utworzone podczas dowolnej metody wywołania zwrotnego prowadzącej do stan wznowiony. "Więc jeśli nie robisz czegoś niezwykłego (gdzie oczywiście musisz się upewnić, że wszystko jest w porządku), GC nic nie zbierze; ponieważ, cóż, te obiekty nie są * śmieciami *. Jeszcze. Jedyne, co musisz sprawdzić, to czy działanie zostało zniszczone. Co znowu możesz zrobić, używając powyższej metody –