Как выполнять один и тот же метод непрерывно и возвращать значение при каждом выполнении?

#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.