最近在做Android的过程中,在UI线程中启动子线程,并通过传参方式执行回调方法,不清楚回调方法的执行线程是谁。猜想是子线程执行回调方法,但是发现GPS服务的onLocationChanged方法执行进程是UI线程(估计是GPS的service是绑定在UI线程上执行造成的),所以特意做了下测试。直接上代码:
再看看执行结果:
[img]http://dl2.iteye.com/upload/attachment/0092/1846/1a6e3792-b4ff-38a2-901e-9f6ad8fa3be8.png[/img]
证明回调方法是在调用该方法的线程中执行的。
public class Test {
public static void main(String[] args) {
System.out.println("111111111");
Thread c = Thread.currentThread();
System.out.println(c.getName() + "=" + c.getId() + "=" + c.hashCode());
System.out.println("111111111");
final Thread thread = new Thread(new Networker(new CallBackListener() {
@Override
public void onCall() {
// TODO Auto-generated method stub
System.out.println("3333333");
Thread c = Thread.currentThread();
System.out.println(c.getName() + "=" + c.getId() + "="
+ c.hashCode());
System.out.println("3333333");
}
}));
Thread thread2 = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("55555");
Thread c = Thread.currentThread();
System.out.println(c.getName() + "=" + c.getId() + "="
+ c.hashCode());
System.out.println("55555");
System.out.println("2222");
thread.start();
System.out.println("2222");
}
};
System.out.println("000000");
thread2.start();
System.out.println("000000");
}
}
class Networker implements Runnable {
CallBackListener listener;
public Networker(CallBackListener listener) {
super();
this.listener = listener;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("4444");
Thread c = Thread.currentThread();
System.out.println(c.getName() + "=" + c.getId() + "=" + c.hashCode());
System.out.println("4444");
System.out.println("xxxxxxxxxx");
listener.onCall();
System.out.println("xxxxxxxxxx");
}
}
public interface CallBackListener {
public void onCall();
}
再看看执行结果:
[img]http://dl2.iteye.com/upload/attachment/0092/1846/1a6e3792-b4ff-38a2-901e-9f6ad8fa3be8.png[/img]
证明回调方法是在调用该方法的线程中执行的。