2012-02-03 13 views
41

Mam długo działające zadanie asynchroniczne, które wysyła niektóre dane do mojego serwera, a następnie zatrzymuje. Cały proces może wymagać kilku próśb i odpowiedzi. Muszę odczytać dane z bazy danych, wysłać je i obsłużyć odpowiedź oraz odpowiednio zaktualizować bazę danych. Korzystam z dostawców treści, aby czytać i aktualizować dane z bazy danych.Należy użyć getApplicationContext lub Activity.this w długim czasie AsyncTask

Teraz, aby skorzystać z dostawcy zawartości, muszę wywołać metodę getContentResolver() w kontekście. Więc zastanawiam się, czy muszę użyć getApplicationContext lub po prostu przekazać Activity.this do moich metod.

Widziałem kilka postów like this wyjaśniających różnicę między tymi dwoma iw większości z nich radzą nam, aby nie używać getApplicationContext, jeśli to możliwe. Chociaż nie chcę, aby mój AsyncTask stracił kontekst z Activity.this po zniszczeniu Activity lub zmianie orientacji. Więc zastanawiam się, czy mogę użyć getApplicationContext w moim przypadku lub użyję Activity.this do spełnienia mojego wymagania.

Odpowiedz

84

Istnieje powód, aby korzystać z każdej z opcji.

Kiedy używasz kontekst, w celu modyfikacji interfejsu użytkownika, ty powinny używać kontekstu aktywności, ponieważ w niektórych przypadkach przy użyciu kontekstu aplikacji może spowodować wyjątek (as described here i here). Takich jak w poniższym przypadku:

TextView senderNameTextView = new TextView(getApplicationContext()); 

Kiedy używasz kontekst wykorzystania cross-aktywności, nie należy związania kontekst działania do działania, gdyż wtedy nawet jeśli działalność jest zniszczony, nie będzie garbage-collected, jak to jest nadal przywoływane z uruchomionego zadania. W takich przypadkach należy użyć kontekstu aplikacji. Aby uzyskać jeszcze więcej informacji, zobacz the article in Android Developer's site (napisany przez Romain Guy).

Jeśli używasz kontekstu tylko do wywołania getContentResolver, powinieneś użyć kontekstu aplikacji.

+0

Dzięki za "jak opisano tutaj". –

Powiązane problemy