#android #kotlin
#Android #kotlin
Вопрос:
У меня есть проект, в котором пользователь переходит от действия A к B. Некоторая информация из действия B должна быть отправлена в действие A без завершения B. Это должно сделать возможным, чтобы A уже начал обработку данных в фоновом режиме.
У меня есть следующий пример проекта:
Действие A:
class MainActivity : AppCompatActivity() {
private lateinit var goButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
goButton = findViewById(R.id.goButton)
goButton.setOnClickListener{
startActivityForResult(Intent(this, MainActivity2::class.java), 100)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == Activity.RESULT_OK){
if(requestCode == 100){
Log.e("Picture: ", data!!.getStringExtra("picture")!!)
}
}
}
}
Действие B:
class MainActivity2 : AppCompatActivity() {
private lateinit var backButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
backButton = findViewById(R.id.returnButton)
backButton.setOnClickListener{
intent.putExtra("picture", UUID.randomUUID().toString())
setResult(Activity.RESULT_OK, intent)
finish()
}
}
}
Это работает, но если я удалю строку «finish ()», это больше не работает. Но я хотел бы отправлять сгенерированный UUID при каждом нажатии кнопки, а не только по завершении B.
Комментарии:
1. тогда не используйте действия, используйте фрагменты
2. Я хотел бы знать, как я могу сделать это с помощью activities.
Ответ №1:
вы не можете этого сделать, поскольку Activity
одновременно может работать только один, все остальные, по крайней мере, приостановлены, вероятно, также остановлены. таким образом, «backgrounded» Activity
ничего не может сделать, как Activity
графический интерфейс — он не виден, поэтому ему нечего делать. если вам нужно запустить некоторую логическую обработку, ничего не связанную с графическим интерфейсом, тогда весь код должен запускаться в каком-либо работающем в фоновом режиме компоненте, например, new Thread
или simply Service
, и сначала Activity
следует прочитать обработанные данные / состояние обработки при ее возобновлении ( onResume
вызове)