#android #kotlin
#Android #Kotlin
Вопрос:
Я очень новичок в Kotlin, и сейчас у меня действительно раздражающая проблема. Я не знаю, как точно определить этот способ, если есть какой-либо подобный случай, я могу исправить этот вопрос. Моя проблема такова: у меня есть 1 действие, которое получает данные с моего устройства, и когда оно получает данные, оно отправляет эти данные в другое действие, но это второе действие не всегда отображается в пользовательском интерфейсе, если пользователь нажимает кнопку на 1 действие, затем открывается 2. действие. Пока 2. activity не активен, данные, полученные с устройства, не отправляют 2.activity. В моем 2.activity есть счетчик массива и массива, в котором будут храниться данные. При считывании данных правильный счетчик массива увеличивается на единицу. И я проверяю этот счетчик, чтобы отобразить это значение на экране. В 2.activity функция, которая получает данные, показывает точное значение счетчика, но другая функция (которая будет проверять и отображать данные на экране) всегда показывает 0. Я думаю, что одновременно есть своего рода 2 активных действия, но я не уверен. Представление кода следующим образом:
1. Активность
OnCreate{
....
//Get Button Click
Button.setOnClickListener {
val intent = Intent(this, 2.Activity_Class)
startActivity(intent)
send = true
}
//On Data Trigger
//Send Data To 2.Activity if is opened
if (send) {
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
// Run your task here
2.Activity_Class.getData(data.value.toHexString())
}, 1)
}
2. Активность
var counter=0
showData(){
//When I'm writing counter in here counter = 0 always
if(counter>10){
//Do work in here
}
}
getData(data: String){
//Interpret Data ...
counter
//This counter is correct (It's showing correct on log)
}
Я не знаю, как правильно решить эту проблему, и, как я уже сказал, я не уверен, правильно ли это определить эту проблему.
Комментарии:
1. Между действиями существует стена. Вы даже не сможете получить ссылку на другой экземпляр activity, поэтому я не знаю, как вы вызывали его в своем коде выше. Прочитайте об обмене данными между ними. Для этого требуется отправка пакетов через intents. вы также можете установить результат, который возвращается к действию выше в стеке. developer.android.com/guide/components/activities /…
2. Я знаю намерение putExtra int, но мне нужна связь в реальном времени между действиями, поэтому putExtra, к сожалению, не решает мою проблему.
3. Действие, которого нет на экране, не будет запускать какой-либо свой код пользовательского интерфейса, поэтому на самом деле не имеет смысла описывать связь в реальном времени между действиями.
4. В моем случае другим activity является прослушиватель BLE, и он запускается при поступлении данных, после чего отправляет эти данные в activity (который отображается на экране), но также выполняется другая функция. Моя проблема, как и другая функция, отправляет данные в функцию текущего действия, но когда я пытаюсь прочитать эти данные в текущем действии, они всегда показывают ноль, но при вызове функции это не ноль. Одновременно выполняется примерно 2 одинаковых действия, но не уверен.
5. Одновременно выполняется только одно действие. Они находятся в стеке. Теперь возможно, что вы запустили поток, используя другое действие, которое все еще выполняется после того, как это действие опустилось в стек. Но этот поток пропускается после любого изменения конфигурации, например, при вращении экрана. Я бы использовал одно действие с отдельными фрагментами и использовал ViewModel для обработки связи, чтобы она оставалась живой и ничего не пропускала из-за изменений конфигурации.