V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
yuanxx9608
V2EX  ›  Android

安卓中子线程传值的问题

  •  
  •   yuanxx9608 · Dec 11, 2018 via Android · 12725 views
    This topic created in 2694 days ago, the information mentioned may be changed or developed.
    安卓开发里,网络请求需要创建子线程,怎么把值传到主线程呢?
    11 replies    2018-12-12 10:57:01 +08:00
    electronic
        1
    electronic  
       Dec 11, 2018
    Handler Message
    insomnia1232
        2
    insomnia1232  
       Dec 11, 2018
    这种最基础的东西百度一下都比来这强
    xbigfat
        3
    xbigfat  
       Dec 11, 2018
    同意楼上的观点,但是猜测你可能是新手所以没有百度,相信 v2er 们的回答。
    我的回答是:
    Android 不允许在主线程中进行网络请求,所以可以通过异步回调的方式将网络请求结果分发到主线程中。
    几乎都是通过这个方式来进行的。
    厉害一点的可以用 RxJava、Retrofit、或者 OkHttpClient 发起请求。
    Handler + Message 也可以,但是容易造成内存泄漏的问题。
    我喜欢的方法是用 JDK 里面的 HttpUrlConnection + Thread + 手写 interface 做回调。
    (回答错了请各位大佬指正)
    richard1122
        4
    richard1122  
       Dec 11, 2018
    这种场景下也可以考虑用 AsyncTask 做,封装好了临时用一下也容易。

    https://developer.android.com/reference/android/os/AsyncTask
    MoHen9
        5
    MoHen9  
       Dec 11, 2018 via Android
    搜索 okhttp+ retrofit+ rxjava2,网上一堆教程,使用起来非常爽,不用写回调,对 Java 的熟悉程度相对有点要求。
    300
        6
    300  
       Dec 11, 2018 via Android
    rxjava
    merpyzf
        7
    merpyzf  
       Dec 11, 2018 via Android
    @xbigfat 在子线程中做请求结果的回调,最终被调用的方法不是仍然执行在子线程的么?所以如果需要更新 ui 还是需要切换线程的吧。
    merpyzf
        8
    merpyzf  
       Dec 11, 2018 via Android
    @xbigfat 不太清楚答主所说的喜欢使用“ HttpUrlConnection + Thread + 手写 interface 做回调"的原因在哪儿?和使用 Handler 一样如果没有通过静态内部类的方式创建 Thread 对象,其内部仍然会持有外部类的引用啊!如果线程所处的 activity 被关闭,而线程却没有执行完毕,这个时候仍然会出现内存泄露的问题啊!
    xbigfat
        9
    xbigfat  
       Dec 12, 2018 via iPhone
    @merpyzf 呃,好像确实是这个问题。我再寻思寻思
    nestorm001
        10
    nestorm001  
       Dec 12, 2018
    建议看看 SDK 里 Handler、Looper、Message 和 MessageQueue 的源码
    glaucus
        11
    glaucus  
       Dec 12, 2018
    Retrofit,回调方法自动切到主线程
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4721 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 01:03 · PVG 09:03 · LAX 18:03 · JFK 21:03
    ♥ Do have faith in what you're doing.