1 electronic 2018-12-11 21:47:54 +08:00 Handler Message |
![]() | 2 insomnia1232 2018-12-11 22:16:19 +08:00 这种最基础的东西百度一下都比来这强 |
![]() | 3 xbigfat 2018-12-11 22:29:31 +08:00 同意楼上的观点,但是猜测你可能是新手所以没有百度,相信 v2er 们的回答。 我的回答是: Android 不允许在主线程中进行网络请求,所以可以通过异步回调的方式将网络请求结果分发到主线程中。 几乎都是通过这个方式来进行的。 厉害一点的可以用 RxJava、Retrofit、或者 OkHttpClient 发起请求。 Handler + Message 也可以,但是容易造成内存泄漏的问题。 我喜欢的方法是用 JDK 里面的 HttpUrlConnection + Thread + 手写 interface 做回调。 (回答错了请各位大佬指正) |
![]() | 4 richard1122 2018-12-11 23:03:04 +08:00 |
![]() | 5 MoHen9 2018-12-11 23:23:29 +08:00 via Android 搜索 okhttp+ retrofit+ rxjava2,网上一堆教程,使用起来非常爽,不用写回调,对 Java 的熟悉程度相对有点要求。 |
![]() | 6 300 2018-12-11 23:28:58 +08:00 via Android rxjava |
![]() | 7 merpyzf 2018-12-11 23:34:27 +08:00 via Android @xbigfat 在子线程中做请求结果的回调,最终被调用的方法不是仍然执行在子线程的么?所以如果需要更新 ui 还是需要切换线程的吧。 |
![]() | 8 merpyzf 2018-12-11 23:43:21 +08:00 via Android @xbigfat 不太清楚答主所说的喜欢使用“ HttpUrlConnection + Thread + 手写 interface 做回调"的原因在哪儿?和使用 Handler 一样如果没有通过静态内部类的方式创建 Thread 对象,其内部仍然会持有外部类的引用啊!如果线程所处的 activity 被关闭,而线程却没有执行完毕,这个时候仍然会出现内存泄露的问题啊! |
10 nestorm001 2018-12-12 08:42:15 +08:00 建议看看 SDK 里 Handler、Looper、Message 和 MessageQueue 的源码 |
![]() | 11 glaucus 2018-12-12 10:57:01 +08:00 Retrofit,回调方法自动切到主线程 |