首页 > 解决方案 > 将数据从活动 B 传递到 A 而 B 未完成

问题描述

我有一个项目,用户从活动 A 导航到 B。活动 B 中的一些信息必须在 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 完成时发送。

标签: androidkotlin

解决方案


你不能这样做,因为Activity可能只有一个同时工作,所有其他人至少暂停,可能也停止。因此,“背景”Activity不能像ActivityGUI 一样做任何事情——它不可见,所以它无所事事。如果您必须开始一些逻辑处理,与 GUI 无关,那么所有代码​​都应该在某个后台工作组件中开始,例如新的Thread或简单的Service,并且首先应该在恢复(调用)Activity时读取已处理的数据/处理状态onResume


推荐阅读