Zaleca się używanie klas narzędzi w Androidzie, AsyncTask i luźnym sprzężeniu

Próbowałem szukać jakiejkolwiek dyskusji na ten temat, ale nie znalazłem dotąd niczego użytecznego. Dlatego postanowiłem iść dalej i opublikować to.

Moje pytanie dotyczy najlepszych praktyk Androida. Tworzę prostą aplikację, która wywołuje punkt końcowy RESTful, analizuje pobrany JSON i pokazuje wyniki w niektórych fragmentach zawartych w działaniu.

Mam niestandardową klasę „utility”, która rozszerza AsyncTask. W metodzie doInBackground wykonuję żądanie, przechowuję odpowiedź w ciągu itp. (Bardzo proste rzeczy).

Teraz rozumiem, że istnieją dwie inne metody AsyncTask - onPreExecute i onPostExecute. Jeśli to, co zbadałem w Internecie, jest poprawne, metody te powinny być w stanie wchodzić w interakcje z interfejsem użytkownika, przekazując mój kontekst do tej klasy narzędzi, znajdując widok według identyfikatora, ustawiając tekst pola lub cokolwiek zechcę do zrobienia.

Więc to jest moje pytanie. Jaka jest najlepsza praktyka w tym zakresie?

Obecnie moja klasa narzędziowa, która rozszerza AsyncTask i sprawia, że ​​wywołanie usługi sieci Web ma prywatną zmienną składową:

    private FragmentActivity mActivityContext;

A potem, aby wejść w interakcję z interfejsem użytkownika, robię coś takiego:

@Override
protected  void onPreExecute()
{
    super.onPreExecute();
    android.support.v4.app.FragmentManager fm = mActivityContext.getSupportFragmentManager();
    MainActivity.PlaceholderFragment fragment = (MainActivity.PlaceholderFragment)fm.findFragmentByTag("PlaceholderFragment");

    if (fragment != null)
    {
        TextView textView = (TextView)fragment.getView().findViewById(R.id.my_custom_field);
        textView.setText("This field was updated through onPreExecute!");
    }
}

Chociaż wydaje się, że jak dotąd działa to dobrze, moim problemem jest - czy klasa użytkowa powinna uzyskiwać dostęp do menedżera fragmentów aktywności, do której ma odniesienie? Czy powinien mieć nawet odniesienie do aktywności? Za pomocą menedżera fragmentów klasa narzędzi musi znać znacznik fragmentu. Nie jest to podejście modułowe lub luźno powiązane. Czy rozwiązanie jest tak proste, jak po prostu przekazanie znacznika fragmentu, gdy tworzę instancję klasy narzędzi, zamiast mieć ją tak trudną, jak teraz? Czy istnieje lepsza alternatywna trasa?

questionAnswers(2)

yourAnswerToTheQuestion