0

在我的 Android 应用程序中,我使用线程从 Internet 下载图像,但由于某种原因,当我在我的 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 线程上运行......但是为什么?

4

1 回答 1

0

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

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

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

阅读本教程,将您的网络访问转移到AsyncTask.

于 2012-07-13T12:35:47.297 回答