问题:
最近在做软件工程大作业, 用Spring mvc做服务器,安卓做客户端
然后在电脑上开启了tomcat服务器,用安卓虚拟机测试客户端发现可以连接服务器,但是用真机测试,却一直都不能连接
原因:
Google从Android 3开始,强制默认禁止UI主线程发起通信请求。
而我的虚拟机SDK版本是2.3.3, 而手机确实4.1.1,所以造成了虚拟机可以连接服务器,而真机却不可以。
解决方法:
方法1.可以临时性的 在Activity初期化的时候,指定StickMode,可以绕开这个OS check, 不过别把这个当彻底的解决方法
在Activity中的OnCreate里面添加:
StrictMode.setThreadPolicy(new Strict Mode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() .penaltyLog() .build()); StrictMode.setVmPolicy(new Stric tMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .penaltyLog() .penaltyDeath() .build());
再在onCreate()方法前面加上@SuppressLint("NewApi")注解就可以了。
方法2:
经过测试,上面那个方法只在程序只有一个Activity的情况下成功过,多个Activity有http连接的情况还没有成功过,所以这个方法不通用。
更好的方法是在开一个子线程来进行异步http连接
推荐用AynsTask类来进行异步处理。
AynsTask是android提供了一套专门用于异步处理的类。使用这个类可以为耗时程序开辟一个新线程进行处理,处理完时返回。
其实,AsynTask类就是对Thread类的一个封装,并且加入了一些新的方法。
推荐看这篇文章介绍更详细:点击打开链接
也可以用Handler+Thread结构,看个人喜好。
相关推荐
而在Android 3.0及以上版本,如果在主线程中进行网络操作,`StrictMode`会抛出`NetworkOnMainThreadException`异常。因此,为了使应用在不同版本上都能正常运行,我们需要对代码进行兼容性处理。 首先,我们需要...
Android Easeui 3.0 是一个专门用于构建即时通讯功能的UI框架,它基于环信(Easemob)服务,帮助开发者快速集成聊天、消息推送等通信功能。在实际开发过程中,可能会遇到一些常见问题,以下是对这些问题的详细解析:...
以上就是Android 3.0中使用Socket进行网络通信的基本步骤和关键知识点,它展示了如何在Android客户端与远程服务器之间建立连接,发送和接收数据。通过这种方式,你可以构建各种需要实时数据交换的应用,如即时通讯、...
2. **使用Thread进行异步操作**:`StartTCP` 类继承自 `Thread`,在 `run()` 方法中执行Socket通信的操作,避免了阻塞主线程,保证了用户界面的流畅性。 3. **InetAddress类**:`InetAddress.getByName("127.0.0.1...
- 主线程(PostThread):事件在发布事件的线程中处理,通常用于更新 UI。 - 背景线程(BackgroundThread):事件在后台线程中处理,避免阻塞 UI。 - 异步(Async):事件在新的线程中处理,适合耗时操作。 - ...
10. **AsyncTask**:AsyncTask是Android提供的一种轻量级异步任务框架,用于在后台线程执行耗时操作,然后在主线程更新UI。不过,从Android 3.0开始,推荐使用更强大的线程管理工具,如Handler、Runnable、Executor...
在Android 3.0(API级别11)及以上版本,系统开始严格限制主线程上的网络活动,以防止UI冻结。为了解决这个问题,我们可以采用以下策略: 1. **AsyncTask**:Android提供的一个轻量级组件,用于在后台线程执行任务...
Android系统默认在主线程(UI线程)执行所有的用户交互,如果在这个线程中执行耗时操作,会导致应用程序无响应(ANR)。因此,理解并熟练掌握多线程管理对于开发流畅的Android应用至关重要。 ### 1. 主线程与工作...
5. **异步处理与线程管理**:Android应用为了避免阻塞主线程,通常使用AsyncTask、Handler、Thread或Runnable进行异步处理。反编译后的源码可以帮助我们理解应用如何有效地进行后台任务和线程调度。 6. **权限管理*...
`Handler`和`Looper`组合可以实现与主线程的通信,确保UI更新不阻塞主线程。 其次,"消息"处理是Android中控制线程间通信的关键。`Handler`类允许开发者发送和处理`Message`对象,这些消息通常在不同的线程之间传递...
在Android系统中,处理长时间运行的任务时,通常不建议在主线程(UI线程)上执行,因为这样会导致应用无响应(ANR)并影响用户体验。因此,我们需要掌握如何正确地管理和显示进度条,同时确保后台运算不影响主线程的...
通过以上步骤,你可以在 Android 应用中有效地利用 EventBus 3.0 进行组件间的通信,并实现在后台更新 UI 的功能。这个库的强大之处在于其灵活性和易用性,能够帮助开发者减少代码冗余,提高代码可维护性。
8. **线程处理**:USB通信通常涉及I/O操作,需要在非主线程中执行,以避免阻塞UI。可以使用Handler、AsyncTask或其他并发机制来实现。 9. **数据解析与处理**:收到的数据可能需要根据应用需求进行解析和处理,例如...
10. **多线程与Handler**:在Android中,主线程负责UI更新,而其他任务通常在后台线程中执行。通过Handler、Looper和Message,开发者可以有效地协调线程间的通信。 11. **Android资源管理**:包括字符串、图片、...
总的来说,EventBus3.0 是 Android 开发中实现组件间通信的有效工具,它简化了事件传递流程,提高了代码的可读性和可维护性。通过合理使用,可以使应用程序的架构更加清晰,降低模块间的耦合度。
11. **多线程与Handler**:Android应用的UI操作必须在主线程中进行,而耗时操作则需要在后台线程中处理。Handler、Looper和Message机制用于在后台线程和主线程间传递消息。 12. **Android SDK版本适配**:随着...
Android提供了AsyncTask、IntentService、Handler、Thread、Runnable等机制进行异步处理,避免阻塞主线程,确保应用的流畅性。 十六、Android测试 Android Studio内置了丰富的测试工具,如JUnit、Espresso等,支持...
Android的AsyncTask是一个内置的异步执行框架,它允许开发者在主线程之外执行耗时操作,同时保持与主线程的通信,确保UI的流畅性。这个框架特别适用于那些需要进行短时间的后台处理并更新UI的任务,如网络请求、...
第15章:这章可能涉及多线程和并发编程,讲解如何使用Handler、Looper和Message进行线程间通信,理解Android主线程(UI线程)与工作线程的分工。同时,可能还会介绍IntentService的使用,它是后台服务的一种最佳实践...
11. **多线程与线程同步**:Android开发中,为避免UI阻塞,通常在子线程处理耗时操作,并通过Handler、Looper、Runnable等机制与主线程通信。 12. **SQLite数据库**:Android内置的轻型数据库,用于存储应用数据。 ...