Как лучше хранить сокеты в андроид-приложении?
Подскажите, как лучше хранить переменные сокетов в андроид-приложении. Мне необходимо обращаться к ним из разных мест приложения. Они могут быть инициализированы только из фонового потока.
Ответы (2 шт):
Объявление в фоновом сервисе переменной static String не подойдет?
Не очень понятно какие именно переменные. Например мы можем создать класс с константами и с ним общаться откуда вам нужно:
public class Constants {
public static final String SOME_NAME = "test";
}
второй вариант создать поле в build.gradle и к нему обращаться (документация). Этот вариант я лично использую для отлова типа сборки приложения и выбора соответствующего адреса сервера:
android {
...
buildTypes {
release {
// These values are defined only for the release build, which
// is typically used for full builds and continuous builds.
buildConfigField("String", "BUILD_TIME", "\"${minutesSinceEpoch}\"")
resValue("string", "build_time", "${minutesSinceEpoch}")
...
}
debug {
// Use static values for incremental builds to ensure that
// resource files and BuildConfig aren't rebuilt with each run.
// If these rebuild dynamically, they can interfere with
// Apply Changes as well as Gradle UP-TO-DATE checks.
buildConfigField("String", "BUILD_TIME", "\"0\"")
resValue("string", "build_time", "0")
}
}
}
и можно их получить:
Log.i(TAG, BuildConfig.BUILD_TIME)
Log.i(TAG, getString(R.string.build_time))
еще как вариант - использовать SharedPreferences. Такой вариант подойдет если данные не будут меняться, доступ к ним не навредит вам и вашему приложению. То есть например если это имя пользователя - можно его сохранить и тащить после перезагрузки приложения из памяти. Если же вы хотите сохранить адрес сервера - лучше использовать build.gradle файл. Если же у вас эти переменные будут меняться то статичные поля вам не подойдут - создайте класс с необходимыми вам полями и инициализируйте их в нужный момент и потом вытаскивайте где вам нужно.