Android Thread getName提供当前的类名

时间:2014-01-02 02:47:16

标签: java android multithreading

在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”。  为什么?

谢谢。

1 个答案:

答案 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);
    }   

}

相关问题