#android #kotlin
Вопрос:
Что я хотел бы сделать, так это заставить метод постоянно выполняться в фоновом режиме и при каждом запуске возвращать значение. Кроме того, у меня есть модель, и я хотел бы сохранить значение, возвращаемое методом, в этой модели, чтобы я мог использовать это значение в другом классе. Возможно ли это сделать?
Метод:
fun generatePair(): Pair<String?, String?> {
val rand = Random.nextInt(0, 10)
val num1: String? = "x$rand"
val num2: String? = "y$rand"
return Pair(num1, num2)
}
Модель:
data class PairData(
val xData: Long,
val yData: String
)
Я хочу, чтобы метод generatePair работал непрерывно, и каждый раз, когда он запускается, получайте новую пару и сохраняйте ее в классе данных. После этого я хочу перевести Пару в другой класс. Как это возможно сделать? Может быть, со службой?
Комментарии:
1. Вам просто нужен поток для самой базовой реализации. Реальная проблема заключается в том, что вы столкнетесь с защитой питания Android, если вы создадите фоновое приложение, и что при этом у вас в конечном итоге закончится память (сколько времени зависит от того, насколько велика структура данных и сколько оперативной памяти Android предоставит вам на вашем устройстве). Как правило, вы не просто бесконечно генерируете данные без контроля скорости, но я предполагаю, что это учебный проект.
Ответ №1:
Вы можете сохранить коллекцию в одноэлементном массиве где-нибудь в своем коде:
object accessibleVariables{
val pairList = arrayListOf<PairData>()
}
Тогда вы могли бы сделать что-то вроде этого:
fun loopMethod(){
// Start a new thread to prevent blocking other code
Thread{
// You could change this to a variable, to stop the loop when you would like
while(true){
accessibleVariables.pairList.add( generatePair() )
}
}.start()
}
Комментарии:
1. И как я могу использовать список пар в другом классе?
2. Затем вы можете вызвать accassibleVariavles.pairList. «Объект» создал одноэлементный класс при запуске приложения. Все переменные внутри доступны для всех ваших классов, которые реализуют модуль, в котором создаются доступные переменные. Вы должны быть осторожны с «while(true)» без Thread.sleep(1000) (подождите одну секунду), потому что использование тайм-аута не заполнит вашу память объектами PairData.
3. Еще раз привет, возможно ли получить доступ к «доступным вариантам» из другого проекта? Если я импортирую этот проект как библиотеку, если я получаю доступ к «Доступным переменным» из другого проекта, я всегда получаю значение null.