`
qiang106
  • 浏览: 387984 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于android.os.NetworkOnMainThreadException异常

 
阅读更多

在开发使用网络连接的android应用时,遇到这么一个问题,只要一连接网络就报下面这个异常

 

android.os.NetworkOnMainThreadException

异常截图

查了下API和源码,发现原来在4.0之后,使用网络时都会用到

 

StrictMode

中 AndroidBlockGuardPolicy的检查策略,如果在UI线程连接网络就会报这个异常,尝试了一下把AndroidMainfest中android:targetSdkVersion="15"去掉或者更换成更低的版本,这个异常就不会报了。最根本的解决办法是把这些网络操作放到非UI线程去执行。

 

在API文档中这一点也有了说明,这样也好,避免我们把耗时的网络操作放到UI线程中去执行,提高应用的用户体验。


在此记一下,免得以后忘记,也分享出来,希望朋友们不会再范同样的错误了。

 

 

API说明贴出来:

 

The exception that is thrown when an application attempts to perform a networking operation on its main thread.

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. 

 

 

  • 大小: 89.9 KB
分享到:
评论

相关推荐

    Caused by: android.os.NetworkOnMainThreadException错误解决办法

    在Android开发中,`Caused by: android.os.NetworkOnMainThreadException` 是一个常见的错误,它意味着开发者尝试在主线程(UI线程)中执行网络操作,这是被禁止的。自Android 4.0 (API Level 14)以后,为了保证用户...

    Android 主线程Exception解决方案Demo

    当开发者违反这一规则时,系统会抛出`Android.os.NetworkOnMainThreadException`,提示主线程异常。 针对这个问题,Android提供了一些解决方案来确保网络请求等耗时操作不在主线程中执行。以下是几种常见的处理方式...

    多线程技术在Android手机开发中的运用.pdf

    1. **UI线程不能被阻塞**:所有与UI相关的操作必须在UI线程中执行,否则会抛出`android.os.NetworkOnMainThreadException`等异常。为了避免阻塞UI线程,长耗时的操作如网络请求、数据库操作应放在子线程中执行。 2. ...

    Android网络通信之网络图片查看器事例代码

    本文将深入探讨如何处理“android.os.NetworkOnMainThreadException”这一常见的异常,该异常通常发生在尝试在网络主线程上执行网络操作时。理解这个问题并找到解决方案对于优化应用性能和提升用户体验至关重要。 ...

    Android应用源码之alertDialog.zip

    - 在异步操作中创建`AlertDialog`时,需确保操作在UI线程执行,否则会抛出`android.os.NetworkOnMainThreadException`异常。 9. **Material Design兼容** - 对于Android 5.0(API级别21)及以上版本,`...

    Android倒计时功能的实现(CountDownTimer)

    请确保在UI线程中执行这些操作,否则可能会抛出 `android.os.NetworkOnMainThreadException` 异常。可以使用 `runOnUiThread` 或 `Handler` 来更新UI: ```java @Override public void onTick(long ...

    Android应用源码之HandlerLooper2.zip

    例如,当一个服务或者后台线程需要更新UI时,它可以通过`Handler`将更新操作的消息发送到UI线程,确保不会抛出`android.os.NetworkOnMainThreadException`等异常。 7. **生命周期管理**: 当不再需要使用`Handler`...

    android里如何在子线程中如何更新主线程的控件

    这意味着,如果你在子线程中尝试修改任何UI元素,如文本、图片或者布局,系统会抛出`android.os.NetworkOnMainThreadException`异常,提示你在子线程中进行了网络操作或者UI更新。因此,要在子线程中更新主线程的...

    android手机中应用程序异步加载,自己写的项目源代码

    - 在更新UI时,确保始终在主线程进行,以免抛出`android.os.NetworkOnMainThreadException`异常。 - 管理好生命周期,避免内存泄漏和资源浪费。 - 使用适当的缓存策略,减少不必要的网络请求或数据库查询。 通过...

    应用源码之HandlerLooper2.zip

    - 不要在非UI线程中直接更新UI,否则会导致`android.os.NetworkOnMainThreadException`等错误。 - 使用`Looper.quit()`或`Looper.quitSafely()`可以结束`Looper`的消息循环,但需谨慎操作,因为这可能会影响到其他...

    获取设备上的所有传感器信息并显示源码.zip

    在实际应用中,显示传感器信息通常涉及到更新UI,这可能需要用到线程同步技术,比如`runOnUiThread()`或使用`Handler`,因为直接在主线程外修改UI可能会导致`android.os.NetworkOnMainThreadException`异常。...

    Toast使用大全(附源码)

    - `Toast`需要运行在主线程中,否则会抛出`android.os.NetworkOnMainThreadException`异常。 - 每次调用`show()`方法,都会重新启动`Toast`的显示计时器,因此连续调用可能导致`Toast`显示时间延长。 - `Toast`在...

    UI线程

    如果其他线程尝试更新UI,Android会抛出`android.os.NetworkOnMainThreadException`或`android.view.ViewRootImpl$CalledFromWrongThreadException`异常,提示开发者必须在正确的线程中执行这些操作。 源码分析是...

    动态刷新界面

    如果在其他线程中修改UI元素,会抛出`android.os.NetworkOnMainThreadException`异常。因此,我们需要使用异步处理或者Handler、Runnable、AsyncTask等工具来处理后台任务,然后在主线程中更新UI。 1. **Handler和...

    17.Handler消息传递机制

    但这里有一个问题,Android不允许在非主线程中直接修改UI,因此这段代码会抛出`android.os.NetworkOnMainThreadException`异常,导致程序崩溃。 正确的做法是使用Handler来处理子线程与主线程的通信。Handler通常...

    异步解析Json任务

    4. 避免在`doInBackground()`中执行与UI相关的操作,这可能导致`android.os.NetworkOnMainThreadException`异常。 5. 对于大文件或大量数据,考虑使用流式解析(如`JsonReader`),以节省内存并提高性能。 总之,...

    ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    任何对UI的操作都必须在这个线程中进行,否则会抛出`android.os.NetworkOnMainThreadException`等异常。因此,当需要执行网络请求、数据库操作或大计算量的任务时,我们需要在其他线程(非UI线程)中执行。 接着,...

    android使用videoview播放视频

    - 在处理用户交互(如点击按钮)时,通常需要在UI线程中进行,否则可能会抛出`android.os.NetworkOnMainThreadException`异常。 - 如果需要在视频播放完成后执行某些操作,可以监听`OnCompletionListener`事件。 ...

Global site tag (gtag.js) - Google Analytics