gpt4 book ai didi

android - 在 Kotlin 中,处理程序线程会等待另一个线程完成吗?

转载 作者:行者123 更新时间:2023-11-29 23:30:44 26 4
gpt4 key购买 nike

我想每 5ms 记录一次传感器值

但如果我在其他线程中捕获值,我不知道这些值是否正确。例如x 是最后一个值,而 y 和 z 是以前的值

所以我写这个程序来测试,如果值不对,Log.v("abc not equal", "a:$a b:$b c:$c")会被调用

但是结果没问题,a b c总是相等的

我应该相信这个结果吗?为什么 a b c 永远不一样? (例如 a:10 b:9 c:9),处理程序是否等待 SensorEventListener 完成?

class MainActivity : AppCompatActivity() {

var a=0
var b=0
var c=0

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL)

val handler = Handler()
val run = object : Runnable{
override fun run() {

if(!(a == b && b == c)){
Log.v("abc not equal", "a:$a b:$b c:$c")
}
handler.postDelayed(this,5)
}

}
handler.postDelayed(run,5)
}

private val sensorListener = object: SensorEventListener {
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {}

override fun onSensorChanged(event: SensorEvent?) {
if(event != null){
val xRaw = event.values[0]
val yRaw = event.values[1]
val zRaw = event.values[2]

if(a>100){
a=0
b=0
c=0
}

a+=1
slow()
b+=1
slow()
c+=1

}
}
}
fun slow(){
var x = 0
while (x < 50000) {
x++
if(x>10) {
var y = Random().nextInt(x - 1)
}
}
}
}

最佳答案

“registerListener()”方法有一个附加参数,用于定义要使用的处理程序。您没有使用该附加参数,因此 Listener 将在 MainThread/UiThread 中运行其所有回调方法(“onSensorChanged()”等)。甚至你的“处理程序”(和 Runnable 对象)变量也在 Main/UiThread 中运行,所以没有任何问题。如果您的“registerListener()”方法或/和“处理程序”变量使用不同的线程,则可能会出现问题。

关于android - 在 Kotlin 中,处理程序线程会等待另一个线程完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52736863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com