Нормально ли передавать контекст множеству методов?

1

Я использую различные объекты (например, большое растровое изображение) во многих действиях, поэтому я создал класс с именем DataHolder который содержит многие из этих общих объектов в качестве статических объектов.

Тем не менее, я также часто использую общие предпочтения, поэтому этот класс данных также содержит один вспомогательный класс общих предпочтений, называемый Shop.

Это в сочетании с общим растровым изображением и т.д. Приводит к тому, что мне приходится передавать контекст каждому методу, который использует Shop ! У меня, вероятно, есть объект контекста в качестве аргумента для 50% моих методов, что довольно раздражает.

Нормально ли часто передавать контексты?

Как я могу улучшить свою структуру данных?

Теги:
android-activity
singleton
android-context

1 ответ

0
Лучший ответ

Вы можете рассмотреть возможность использования глобального ApplicationContext который может служить вашей цели для загрузки объекта DataHolder. Обычно я не использую такие контексты, однако, по моему мнению, ваша ситуация имеет смысл использовать глобальный контекст приложения.

Чтобы достичь этого, вы можете рассмотреть возможность использования следующего класса в вашем проекте.

import android.content.Context;
import android.support.multidex.MultiDexApplication;

public class MyApplication extends MultiDexApplication {

    private static MyApplication myApplicationInstance;

    public static MyApplication getMyApplicationInstance() {
        return myApplicationInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        myApplicationInstance = this;
    }

    public static Context getAppContext() {
        return getMainApplicationInstance().getApplicationContext();
    }
}

И добавьте этот класс Application в ваш файл AndroidManifest.xml под тегом application как показано ниже.

<application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <!-- Your activity declarations go here-->

</application>

Следовательно, вместо передачи Context вы можете получить контекст из одного пространства и, следовательно, улучшить структуру данных. Надеюсь, это поможет!

  • 0
    Я не могу использовать getApplicationContext() потому что не могу получить доступ к этому методу в большинстве соответствующих классов ... Конечно, я использую this как контекст в действиях и т. Д., Но в неактивных классах я полагаюсь на переданные контексты РЕДАКТИРОВАТЬ : Я также не могу сохранить Context в Shop , потому что тогда я буду держать объект (синглтон Shop ), который содержит контекст как статический объект, который является утечкой памяти. (Магазин-синглтон хранится статически в классе DataHolder )
  • 0
    Привет, я обновил код. Пожалуйста, проверьте сейчас. Да, я забыл, что вы используете это из класса Singleton, который не является Activity или Fragment . Следовательно, вам нужно сначала передать контекст из вашей Activity при инициализации Shop . Тогда вы можете рассмотреть возможность использования этого везде. Надеюсь, вы поняли идею.
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню