/ / Garbage Collector i AsyncTask związane z zniszczoną aktywnością - Android, Android-Activity, Android-Asynctask

garbage collector i AsyncTask związane ze zniszczoną działalnością - android, android-activity, android-asynctask

czytam książkę „Android Best Practices”. To sprawia, że ​​mam pytanie dotyczące korzystania z AsyncTask.

Wiele przykładów pokazuje, jak to osiągnąć za pomocąklasa AsyncTask z działania. Chociaż takie podejście będzie działać przez większość czasu, zmiana orientacji z pionowej na poziomą lub vice versa będzie miało niezamierzony efekt. Działanie, które utworzyło AsyncTask, jest niszczone zmiana orientacji i odtworzona w nowej orientacji. AsyncTask pozostaje powiązany z zniszczoną aktywnością, więc wynik nie może wrócić do nowej aktywności. Dodatkowo usługi sieciowe metody wywołania zwrotnego w pierwotnym działaniu w AsyncTask zapobiegają odśmiecaniu odzyskiwanie pamięci pierwotnego działania, chyba że zachowuje się szczególną ostrożność, gdy działanie jest zniszczony. Istnieje kilka rozwiązań tego problemu za pomocą AsyncTask, ale lepszy sposób na rozwiązanie Problemem jest użycie klasy IntentService, ponieważ żyje ona poza cyklem życia działania.

jakie jest rozwiązanie rozwiązania tego problemu? i Czy użycie asynctask jest prawidłowe? jaki jest najlepszy sposób na połączenie z serwisem internetowym i uzyskanie z niego naszych danych?

************* Edytować *******************

moje główne pytanie brzmi:

1- jak można zniszczyć Asynctask, gdy jego aktywność zostanie zniszczona?

2 - jaki jest najlepszy sposób na połączenie z serwisem internetowym i uzyskanie z niego naszych danych? intentService lub AsyncTask lub ...?

Odpowiedzi:

1 dla odpowiedzi № 1
 1. AsyncTasks don"t follow Activity instances" life cycle. If you start an
AsyncTask inside an Activity and you rotate the device, the Activity
will be destroyed and a new instance will be created. But the AsyncTask
will not die. It will go on living until it completes.

AsyncTask processes are not automatically killed by the OS. AsyncTask
processes run in the background and is responsible for finishing it"s
own job in any case. You can cancel your AsycnTask by calling
cancel(true) method. This will cause subsequent calls to isCancelled()
to return true. After invoking this method, onCancelled(Object) method
is called instead of onPostExecute() after doInBackground() returns.

2. intentService or AsyncTask or Volley or Retrofit , there are so many
way for connecting with web services and all has it"s importance. But
you can use Volley is now officially supported by Google.

0 dla odpowiedzi nr 2

odpowiedź 1: użyj activity.isFinishing () do sprawdzania aktywności wykończeniowej

odpowiedź 2: użyj modernizacja ponieważ łatwa konfiguracja i obsługa wszystkich problemów przez AsyncTask