奇怪的networkonmainthread异常:仅在galaxy nexus而不是在模拟器中

时间:2012-07-10 21:14:30

标签: android multithreading user-interface networking

在我的Android应用程序中,我使用线程从互联网上下载图像,但由于某些原因,当我在我的galaxy nexus上运行应用程序时会抛出networkonmainthread异常,但如果我在模拟器中运行应用程序则不会(测试Android)版本2.3.3和4.0.3)。

Thread ImageLoaderThread = new Thread(new Runnable() {
public void run() {

 bitmap= DrawableManager.fetchDrawable(URL);

 });

因为当我在启动时直接启动线程时GUI开始缓慢,我得到的印象是,线程确实在GUI线程上运行......但为什么???

1 个答案:

答案 0 :(得分:0)

这取决于你的构建方式。在为设备构建时,您正在使用Honeycomb SDK(适用于Android 3.0及更高版本)进行构建。旧版SDK永远不会抛出NetworkOnMainThreadException

您没有为模拟器使用相同的SDK,至少在构建到2.3.3上进行测试时没有。如果在2.3.3和4.0.3上进行测试时使用相同的构建配置,那么这将完全解释您所看到的所有结果。

在主线程上访问网络从未被认为是良好的做法(关注的是UI响应,因为当您等待网络响应时,没有其他线程可以为UI提供服务),但是直到Honeycomb才对API进行严格禁止。

阅读此tutorial,将您的网络访问权转移到AsyncTask