Nagrywarki |
Pliki |
Dyski twarde |
Recenzje |
Księgarnia |
Biosy |
Artykuły |
Nagrywanie od A do Z |
Słownik |
FAQ
|
||
29.12.2013, 11:07 | #1 |
Hibernant
CDRinfo VIP
Data rejestracji: 24.06.2004
Posty: 17,115
|
Multitasking
Czy ktoś wie dlaczego Android sam decyduje co trzymać w pamięci i dlaczego sam decyduje które aplikacje mają być uruchomione? Drażni mnie to niesłychanie. Może być to wygodne w przypadku aplikacji, które faktycznie muszą cały czas chodzić w tle (jakieś budziki, taskery czy inne secure teksty), ale czemu program raz uruchomiony działa dopóki go samemu nie zkilluję w menu aplikacje lub dopóki Android nie zdecyduje żeby akurat tę aplikację teraz zabić?
Zwróciłem na to uwagę dopiero kiedy Timly tak mi nie obciążył systemu, że zaczęło się wszystko przycinać (nawet na ekranie blokady). Nie to żeby to była jakaś antyreklama, program wygląda rewelacyjnie, równie dobrze się go używa ale najwyraźniej na mojej Xperii nie działa jak powinien. A może jest jakaś aplikacja, który w wygodny sposób pozwalałaby na zabijanie kilku na raz? Wchodzić w każda z osobna i wymuszać zamykanie to dramat jakiś.
__________________
Wszystko co chciałbyś wiedzieć o: | PSX | PS2 | PS3 | Xbox | FF000000000003010101010003010000000003010000030000 00000003010000000003010100000003010101010003010000 00000300010101010300000000000301010000000300000001 01030101010100030101000000030000000000030100000000 03000001010103000000000003010100000003000000000103 01000000000301010000000301010000000300000000000301 01010100030000000000030101000000030000000001030003 01000000000301000000030100000000030000000101030100 00000003010000030100000000030100010003010100000003 00000000000300000000000300010301000000000301000003 00000001010301010100000301010000000300000000000301 00000000030000000101030000000001030101000000030101 000000030101000000FF |
#ads | |
CDRinfo.pl
Reklamowiec
Data rejestracji: 29.12.2008
Lokalizacja: Sieć globalna
Wiek: 31
Posty: 1227
|
|
29.12.2013, 11:34 | #2 | |
logged out
CDRinfo VIP
Data rejestracji: 12.07.2003
Lokalizacja: /home
Posty: 12,518
|
Ehhh tyle razy o tym pisałem.
W związku z tym, że systemy mobilne w pewien sposób różnią się od systemów, które znajdują się na desktopach pewne rzeczy trzeba było stworzyć inaczej - min. multitasking. Telefony nie posiadają obszaru gdzie mogą zrzucić część pamięci ram - tzw. SWAP. Oczywiście można sobie to "dorobić", jednak objawia się to lagami - próbowałem różnych konfiguracji i zawsze były drobne lagi. Multitasking w Androidzie jest inteligentny. Źle skonfigurowany przez producenta, lub użytkownika może prowadzić do tego, że urządzenie będzie pracowało zupełnie inaczej niż ktoś sobie to przyjął. Android wykorzystuje standardową funkcjonalność jądra Linuksa OOM - OutOfMemory. W momencie kiedy w systemie poziom pamięci RAM zbliża się do wartości krytycznej, lub zero - w zależności od konfiguracji - /sys/module/lowmemorykiller/parameters/minfree zostaje zabita aplikacja, aby pamięć zwolnić. Sztuką jest tutaj wybrać jaką aplikację system ma zamknąć. ActivityManagerServer.java: Cytat:
Plik minfree (1 strona == 4 KB pamięci) zawiera wartości dla tych 6 przedziałów. Regulując te wartości możemy np. zwiększyć ilość aplikacji, która będzie trzymana w pamięci. Więcej można poczytać np. tutaj - http://forum.xda-developers.com/showthread.php?t=622666 Należy także dodać, że aplikacje w systemie reagują na sygnały systemowe. Np. uruchomiono WiFi. Jeżeli obsłużymy taki sygnał, to możemy powiedzieć naszej aplikacji co ma robić - np. pobranie poczty. Jest to bardzo przydatna rzecz, bo można stworzyć bardzo potężne aplikacje. Jednak wykorzystane nieprawidłowo, lub nadużywane może objawiać się tym, że dana aplikacja będzie się uruchamiała przy większości sygnałów.
__________________
XMPP: andrzej(at)czerniak.info.pl Ostatnio zmieniany przez andy : 29.12.2013 o godz. 11:38 |
|
29.12.2013, 12:14 | #3 | |
Hibernant
CDRinfo VIP
Data rejestracji: 24.06.2004
Posty: 17,115
|
Nie wiedziałem o tym. Nie podoba mi się ten pomysł, można to było rozwiązać zupełnie inaczej.
Cytat:
__________________
Wszystko co chciałbyś wiedzieć o: | PSX | PS2 | PS3 | Xbox | FF000000000003010101010003010000000003010000030000 00000003010000000003010100000003010101010003010000 00000300010101010300000000000301010000000300000001 01030101010100030101000000030000000000030100000000 03000001010103000000000003010100000003000000000103 01000000000301010000000301010000000300000000000301 01010100030000000000030101000000030000000001030003 01000000000301000000030100000000030000000101030100 00000003010000030100000000030100010003010100000003 00000000000300000000000300010301000000000301000003 00000001010301010100000301010000000300000000000301 00000000030000000101030000000001030101000000030101 000000030101000000FF |
|
29.12.2013, 13:01 | #4 | ||
logged out
CDRinfo VIP
Data rejestracji: 12.07.2003
Lokalizacja: /home
Posty: 12,518
|
Cytat:
Cytat:
__________________
XMPP: andrzej(at)czerniak.info.pl |
||
29.12.2013, 14:06 | #5 |
Hibernant
CDRinfo VIP
Data rejestracji: 24.06.2004
Posty: 17,115
|
W manifeście mogłyby być informacje do której grupy przypisana jest aplikacja i wówczas Android na podstawie tego decydowałby co zrobić z programem po wyjściu z niego (większość nie wymaga aktywności po wyłączeniu, ani sprawdzania czegokolwiek). Więc mogłaby być od razu zabijana, bez dziwnego zbieractwa jak obecnie.
__________________
Wszystko co chciałbyś wiedzieć o: | PSX | PS2 | PS3 | Xbox | FF000000000003010101010003010000000003010000030000 00000003010000000003010100000003010101010003010000 00000300010101010300000000000301010000000300000001 01030101010100030101000000030000000000030100000000 03000001010103000000000003010100000003000000000103 01000000000301010000000301010000000300000000000301 01010100030000000000030101000000030000000001030003 01000000000301000000030100000000030000000101030100 00000003010000030100000000030100010003010100000003 00000000000300000000000300010301000000000301000003 00000001010301010100000301010000000300000000000301 00000000030000000101030000000001030101000000030101 000000030101000000FF |
29.12.2013, 14:56 | #6 |
logged out
CDRinfo VIP
Data rejestracji: 12.07.2003
Lokalizacja: /home
Posty: 12,518
|
Tylko jej status zmienia się w większości dynamicznie. Mogę mieć przed sobą np. aplikację Fejsiunia i jest ona widziana jako aplikacja o największym priorytecie (akurat jest widoczna dla użytkownika) więc w przypadku małej ilości pamięci zostanie zamknięta jako jedna z ostatnich. W przypadku kiedy ją zminimalizuje to jej priorytet się zmniejsza.
Może sposób jaki to rozwiązało Google nie jest idealny, jednak jak do tej pory nie usłyszałem porządnego projektu jak by to miało wyglądać. //btw, temat powinien brzmieć Multitasking w Androidzie.
__________________
XMPP: andrzej(at)czerniak.info.pl |
31.12.2013, 13:09 | #7 |
Jukebox Hero
Data rejestracji: 17.09.2004
Lokalizacja: Back for the Attack
Posty: 10,800
|
Mała korekta : to ze Android tak działa to nie wynika z tego że to system mobilny.
Przykładowo Windows Mobile działał dokładnie tak jak desktopowy odpowiednik (kwestia jednego ustawienia czy wolisz aplikacje minimalizować czy ubijać). W momencie gdy zabrakło RAM oczywiście musiał ubić aplikacje w tle, ale dochodziło do tego rzadko. Możłiwe było oczywiście zignorowanie zamykania aplikacji, wtedy system kiedyś sobie ubijał, działało to i tak dużo rzadziej i lepiej niż obecnie na Androidzie. Z drugiej strony bez problemu można skonfigurować desktopa by zachowywał się jak Windows Mobile (wyłączyć swapa i czekać na oom killera). Nawet na Windows (swap 0MB). Po prostu Android jest tak wymagający jeżeli chodzi o RAM, że to jedyne sensowne wyjście ubijać non stop wszystko co się rusza, żeby władować inne programy. Albo montować minimum 1GB RAM (i kto mówi że Vista była wymagająca? Android jest bardziej ) Bo nawet podstawowe aplikacje jak kalendarz, telefon czy launcher + usługi często nie mogą sie pomieścić w pamięci na raz na telefonach z 512MB (zwłaszcza żeby nie przekroczyć wysokich progów oom killera). Na WM przy 64MB RAM (22 wolnego po boocie) programy praktycznie nigdy nie znikały bez sensu, zdarzało mi się nawet obrabiać na nim bitmapy po kilkadziesiąt MB ( ze swapem na karcie pamięci a co!). O w takim programie http://conduits.com/products/artist/ którego odpowiednika dziś próżno szukać w Google Play ( a na WM był z 10 lat temu). Moim zdaniem podejście Androida nie jest inteligentne i pisałem już o tym. Inteligenty system trzyma w wszystko w RAM i ubija w całkowitej ostateczności. Definiowanie progów i stałe utrzymywanie pewnego (dość duzego) obszaru pustego "na zapas" dla maszyny wirtualnej to marnowanie i tak oraniczonych zasobów. Bez dużego pustego obszaru Android niestety wydajnościowo klęka, dlatego nie można obniżyć progów do zera (sprawdziłem u siebie - kończyło sie resetem bo cierpliwość się skończyła). Na efekt takich rozwiązań (i innych jak maszyna virtualna) nie trzeba długo czekać : zamula, przycina itd... Mam SGS2+ (i9105) z 1GB RAM i 4.1 i też czasem przycina choć jest goły i wesoły (służbówka). Ostatnio zmieniany przez sobrus : 31.12.2013 o godz. 13:43 |
|
|