在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是州级。
因此,当我创建SM并切换到状态A1时执行enter()
。 SM对象是在Thread内部创建的,从Thread运行。切换到状态也发生在Thread内部并从Thread运行。
getName
给出A类名而不是线程名“AThread”。
为什么?
谢谢。
答案 0 :(得分:1)
我明白了,你的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);
}
}