Dlaczego proces wywołania.killProcess (Process.myPid ()) to zły pomysł?
Czytałem kilka postów mówiących, że używanie tej metody jest "złe", nie powinno być używane, to nie jest właściwy sposób na" zamknięcie " aplikacji i nie tak działa android...
Rozumiem i akceptuję fakt, że Android OS wie lepiej ode mnie, kiedy jest odpowiedni czas, aby zakończyć proces, ale nie słyszałem jeszcze dobrego wyjaśnienia, dlaczego stosowanie metody killProcess()
jest złe? W końcu - to część android API...
Wiem tylko, że wywołanie tej metody podczas inne wątki wykonują potencjalnie ważną pracę (operacje na plikach, zapis do DB, żądania HTTP, uruchomione usługi..) może być zakończony w środku, a to wyraźnie nie jest dobre. Wiem też, że mogę skorzystać z faktu, że "ponowne otwarcie" aplikacji będzie szybsze, ponieważ system może nadal "trzyma" w stanie pamięci od ostatniego użycia i killProcess()
temu zapobiega.
Poza tym, zakładając, że nie mam takich operacji i nie obchodzi mnie, że moja aplikacja się załaduje są inne powody, dla których nie można użyć metody killProcess()
?
Wiem o metodzie finish (), aby zamknąć działanie, więc nie pisz mi o tym, proszę..
finish()
jest tylko dla Activity
. nie do wszystkich aplikacji i myślę, że wiem dokładnie, dlaczego i kiedy go używać...
I jeszcze jedno-rozwijam również gry z frameworkiem Unity3D i eksportuję projekt do Androida. Kiedy dekompilowałem wygenerowany apk, byłem bardzo zaskoczony, aby dowiedzieć się, że źródło java kod stworzony z unity-implementacja metody Unity - Application.quit()
, z Process.killProcess(Process.myPid())
.
Application.quit()
czy to dobry sposób na zamknięcie gry według poradników Unity3d (czy naprawdę? może się mylę i coś przeoczyłem), więc jak to się dzieje, że deweloperzy Unity framework, którzy wykonują bardzo dobrą pracę, jak się wydaje, zaimplementowali to w natywnym Androidzie do killProcess()
?
5 answers
Kto powiedział wywołanie procesu.killProcess (Process.myPid ()) to zły pomysł?
Tak, pozwalanie OS zarządzać własną pamięcią jest najlepszą praktyką zarówno dla Ciebie, jak i Użytkownika korzystającego z aplikacji (szybsze ponowne otwarcie, mniejsze szanse na zamknięcie siły itp...).
Jednak zakładając, że wiesz na pewno, że nie przerywasz wątków lub innych operacji w tle i używasz tego wywołania w onDestroy()
- nie widzę powodu, dla którego nie powinieneś go używać. Zwłaszcza, gdy jest to wywołanie API, a nie obejście, a Google nie wspomniało, że lepiej nie używać go w dokumentacji API.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-18 14:40:51
<rant>
W idealnym świecie, z doskonałym kodem i bibliotekami, nie musisz wywoływać Process.killProcess(Process.myPid())
, A System operacyjny odpowiednio zabije Twoją aplikację. Na Bliskim Wschodzie zapanuje pokój, świnie będą latać, a problem wstrzymania zostanie rozwiązany.
Ponieważ te wszystkie rzeczy jeszcze się nie wydarzyły są chwile, kiedy trzeba wykonać taki 'zakazany' kod.
Ostatnio dla gry na Androida, którą zrobiłem, darmowa wersja korzystała z biblioteki reklam co utrzymałoby aplikację przy życiu, a także wyciek pamięci. Wersja płatna nie miała tego problemu, ponieważ nie było połączonych bibliotek reklam. Moim rozwiązaniem było dodanie przycisku Zakończ w menu głównym, który wykonał taki kod. Miałem nadzieję, że większość ludzi naciśnie ten Przycisk po zakończeniu i nie muszę się martwić, że to pochłonie pamięć. Wersja płatna, którą właśnie wykonałem finish()
i została wykonana. (To było zanim zakupy w aplikacji dla Google były dostępne, więc musiałem dokonać płatnego i bezpłatnego Wersja, również mogli już naprawić problem i mogłem zaktualizować tę grę, ale naprawdę nie poszło zbyt dobrze i wątpię, aby jakikolwiek czas spędzony na niej był tego wart) {]}
To tak jak w podstawówce / Gimnazjum mówią ci, że nie możesz wziąć pierwiastka kwadratowego z liczby ujemnej. Później w klasie algebry wyższego poziomu mówią... cóż, możesz wziąć pierwiastek kwadratowy z liczby ujemnej, ale masz dziwne wyniki, ale to jest spójne i rozwiązuje problem.
W innych słowa, nie wykonuj "zakazanego" kodu, chyba że wiesz, co robisz.
</rant>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-23 19:11:39
Cóż, Unit3d najprawdopodobniej używa kodu natywnego, a oni zabijają proces jako zabezpieczenie -- nie chcą wyciekać pamięci. Można się spierać, czy jest to dobry pomysł, czy nie, ale fakt, że go używali, nie oznacza, że ty też powinieneś.
Być może istnieją skrajne przypadki, w których chciałbyś użyć killProcess()
, ale zazwyczaj system operacyjny robi to za Ciebie, zgodnie z aktualnym obciążeniem i użytkowaniem. Nie wiesz, jakiej odpowiedzi szukasz-masz świadomość, że korzystając z killProcess()
może zepsuć rzeczy, chyba że możesz uzasadnić jego użycie, nie używaj go.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-15 06:05:22
Oto dwie sytuacje, w których killProcess ugryzie cię i nie zadziała zgodnie z życzeniem:
1) Sticky Services - uruchomią się automatycznie, nawet jeśli zabiłeś proces
2) Timer - jeśli zaplanowałeś uruchamianie wątków na timerze, będą one kontynuowane po zabiciu procesu
Stąd, jak widać, są sytuacje, w których * * killProcess* nie jest rozsądnym rozwiązaniem, aby oczyścić działającą aplikację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 16:18:40
To zły pomysł. po pierwsze, twoja aktywność nie będzie warta oprzyrządowania, ponieważ te struktury rejestrują wszystkie metody cyklu życia i dopiero po czystym wykonaniu zgłaszają status sukcesu testu. jeśli zabijesz proces spod aplikacji testowej, zgłosi on awarię i nie będzie jasne, że tak się dzieje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-03 15:20:51