通过Android SDK框架源代码寻找设置,我已经遇到这样的:mHandler不是从一个同步块内的Android中SDK
private final class GpsLocationProviderThread extends Thread {
public GpsLocationProviderThread() {
super("GpsLocationProvider");
}
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
initialize();
Looper.prepare();
mHandler = new ProviderHandler();
// signal when we are initialized and ready to go
mInitializedLatch.countDown();
Looper.loop();
}
}
(这是来自的Froyo的框架/碱/位置/的java/COM /机器人/内部/位置/ GpsLocationProvider.java)
GpsLocationProviderThread是一个内部类的GpsLocationProvider,和mHandler是GpsLocationProvider成员实例变量。该变量在此线程的run()方法中设置,但不应用同步,并且mHandler不是volatile。
为什么这样吗?即使99%的时间确实有效,但并不总能保证正常工作,这当然不是好的做法。我的理解是正确的,还是有一些我误解的代码微妙?
2010-12-01
skyler
+0
为什么它不工作?是否有其他线程访问mHandler?我们需要更多的背景。 –
2010-12-01 00:27:16
+0
是的,mHandler是从外部线程(主线程或UI线程)访问的。 –
2010-12-01 00:35:47