Я использую различные объекты (например, большое растровое изображение) во многих действиях, поэтому я создал класс с именем DataHolder
который содержит многие из этих общих объектов в качестве статических объектов.
Тем не менее, я также часто использую общие предпочтения, поэтому этот класс данных также содержит один вспомогательный класс общих предпочтений, называемый Shop
.
Это в сочетании с общим растровым изображением и т.д. Приводит к тому, что мне приходится передавать контекст каждому методу, который использует Shop
! У меня, вероятно, есть объект контекста в качестве аргумента для 50% моих методов, что довольно раздражает.
Нормально ли часто передавать контексты?
Как я могу улучшить свою структуру данных?
Вы можете рассмотреть возможность использования глобального 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
вы можете получить контекст из одного пространства и, следовательно, улучшить структуру данных. Надеюсь, это поможет!
getApplicationContext()
потому что не могу получить доступ к этому методу в большинстве соответствующих классов ... Конечно, я используюthis
как контекст в действиях и т. Д., Но в неактивных классах я полагаюсь на переданные контексты РЕДАКТИРОВАТЬ : Я также не могу сохранитьContext
вShop
, потому что тогда я буду держать объект (синглтонShop
), который содержит контекст как статический объект, который является утечкой памяти. (Магазин-синглтон хранится статически в классеDataHolder
)Activity
илиFragment
. Следовательно, вам нужно сначала передать контекст из вашейActivity
при инициализацииShop
. Тогда вы можете рассмотреть возможность использования этого везде. Надеюсь, вы поняли идею.