Android2.1源码中的一个bug
2010-10-14 06:16:00 来源:本站整理核心提示:Looper.prepare();android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_FOREGROUND);ActivityManagerService m = new ActivityManagerService();syn
Looper.prepare();
android.os.Process.setThreadPriority(
android.os.Process.THREAD_PRIORITY_FOREGROUND);
ActivityManagerService m = new ActivityManagerService();
synchronized (this) {
mService = m;
notifyAll();
}
try {
sleep(1000);
} catch (InterruptedException e) { }
synchronized (this) {
while (!mReady) {
try {
wait();
} catch (InterruptedException e) {
}
}
}
Looper.loop();
当然,理论上来讲这样改也不能完全避免问题,只是暂时避免了问题而已。如果想彻底解决问题需要重新设计,还是让谷歌来做吧。
通过这个bug分析,我们以后进行多线程编程的时候一定要注意。线程A等待线程B的通知,在线程B中通知A之后,千万不要再等待线程A的通知,否则容易出现问题。上面Android的代码就是很不好的例子,大家引以为戒。
更多精彩
赞助商链接