gpt4 book ai didi

java - Android Thread getName 给出当前类名

转载 作者:行者123 更新时间:2023-12-01 13:40:13 24 4
gpt4 key购买 nike

在 Android 中我有一个类:

class A extends Thread {

A() {
setName("AThread");

}

class SM extends StateMachine {

class A1 extends State {

@Override
enter() {
Log.d (TAG, "" + Thread.currentThread().getName()); // this gives A

}
}
}
}

class B {

B1 () {
new Handler(super.getLooper()).postDelayed(new Runnable() {
@Override
public void run() {
mA = new A();
mA.start(); // start thread
}
}, 0);
}
}

B 类对象正在从 Android 服务运行。SM 是一个状态机类。 A1 是国家级。所以enter()当我创建SM并切换到状态A1时执行。 SM对象是在Thread内部创建的,从Thread运行。并且状态切换也发生在线程内部并从线程运行。 getName给出 A 类名称而不是线程名称“AThread”。 为什么?

谢谢。

最佳答案

我明白了,你的 StateMachine 正在 Handler 的线程上下文中运行。我敢打赌,即使您从 A 类的 Thread 中删除扩展,您的代码也能正常工作。定义 A 来扩展 Thread 并不是真正在不同的线程上执行 StateMachine,而是在 Looper 的上下文中执行。

以下代码打印 AThread。

public class StateMachineEx {

class A extends Thread {

A() {
setName("AThread");

}
@Override
public void run(){
Log.d ("XXX", "" + Thread.currentThread().getName()); // this gives A
}
}

StateMachineEx(Context context) {
new Handler(context.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
A mA = new A();
mA.start(); // start thread
}
}, 0);
}

}

关于java - Android Thread getName 给出当前类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875585/

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