1
  • 最佳答案

    当线程执行结束的时候,这个线程就已经销毁了,这种做法本身是没有任何错误的。那什么时候这个线程会一直存在着?当你这个线程内部实现了死循环,或者业务逻辑非常庞大很耗时,你Activity生命周期结束了任务还没结束,那这个时候这个线程就会造成内存泄漏。

    再跟你讲讲下面的人的回复,为什么二楼会建议你使用线程池?第一,线程池方便对线程进行统一管理,线程池内部有对线程的优化,可以对空闲的线程进行复用,减少线程资源的损耗;第二,众所周知,线程是有自己的生命周期的,创建、调度、销毁等等,线程池直接省去了线程创建的操作,任务到了就执行,是不是比普通的new 线程对象要快一些?第三,有的时候你需要这个任务延时执行,初始化延时等等,线程池也提供了方式调用,还有任务队列满了的情况下的一些拒绝策略等等,线程池的好处很多很多。

    总结起来,实现线程的方式很多,三楼也给你提供了方式,一句话,在熟悉度还可以的情况下,在合适的场景用合适的方式,学习一种东西的时候可以稍微了解下它的一些原理,表面理解也行,至少你能懂它在做什么,它能做什么

    1255088796991492096  评论     打赏       冒着泡泡的汽水儿
    • 冒着泡泡的汽水儿  回复 @冒着泡泡的汽水儿
      另外使用线程池的时候如果并发并不是非常大,业务场景不复杂可以直接考虑使用现有封装好的线程池,反之,还是建议用最原始的线程池工厂的方式去创建,阿里爸爸把这个作为了编程的规范了
      冒着泡泡的汽水儿 2022-02-24 14:40   回复 1255088796991492096
    • 阿酷  回复 @冒着泡泡的汽水儿
      那如果我这个线程启动后执行时报错了,是否会内存泄漏,比如空指针
      阿酷 2022-02-24 14:52   回复 1250988207093321728
    • 冒着泡泡的汽水儿  回复 @阿酷
      空指针在没有捕获异常的情况下如果使用到了,APP进程被干掉了,也就是崩溃了,进程干掉了就没有所谓的内存泄漏了。假设你捕获了,或者你已经处理了空指针逻辑,那你这个时候是正常走的逻辑,只要你的代码不含阻塞,也算是结束了
      冒着泡泡的汽水儿 2022-02-24 14:58   回复 1255088796991492096
    • 阿酷  回复 @冒着泡泡的汽水儿
      我是 JavaWeb 应用哦、不是 Android , 我查阅一下相关知识先
      阿酷 2022-02-24 15:56   回复 1250988207093321728
  • 建议使用线程池

    https://www.sunofbeach.net/a/1495382671976624130

    这里有我总结的超简单的线程池用法 包会

    1231137268748521472  评论     打赏       码划云
    • 阿酷  回复 @码划云
      我晚点看看怎么用 、不过我这样是可以的吧 不会出现什么问题吗
      阿酷 2022-02-24 13:34   回复 1250988207093321728
    • 码划云  回复 @阿酷
      不会
      码划云 2022-02-24 13:51   回复 1231137268748521472
  • 几点建议:

    1. 考虑使用 IntentService
    2. 通过 Lifecycle 判断 Activity 的生命周期,防止内存泄漏(线程执行完毕虽然会自行销毁,但是执行结束的时间是不确定的,有可能回调时 Activity 已经销毁了)
    3. 使用 线程池 避免创建大量线程
    1204736502274318336  评论     打赏       A lonely cat
    • A lonely cat  回复 @A lonely cat
      补充: 如果你的任务是可以推迟的,那么你可以考虑使用 WorkManager
      A lonely cat 2022-02-24 11:52   回复 1204736502274318336
    • 阿酷  回复 @A lonely cat
      姐姐我写的是JavaWeb、不是 Android
      阿酷 2022-02-24 13:31   回复 1250988207093321728
    • A lonely cat  回复 @阿酷
      我是男的[捂脸] 不过我还是建议你使用线程池而不是 new Thread
      A lonely cat 2022-02-24 13:49   回复 1204736502274318336
    • 阿酷  回复 @A lonely cat
      哈哈哈哈哈你用的女头、我以为是女的
      阿酷 2022-02-24 14:37   回复 1250988207093321728
    • A lonely cat  回复 @阿酷
      emmm
      A lonely cat 2022-02-24 14:51   回复 1204736502274318336
    • 码划云  回复 @阿酷
      原来不是Android啊 不过也没事 差不多 还有一般女的 都会说自己是男的
      码划云 2022-02-24 14:58   回复 1231137268748521472
    • 阿酷  回复 @码划云
      hhh下次要加上 : "JavaWeb ( 非 Android ) :" 才行 , 懂了 女的喜欢说反话 !!
      阿酷 2022-02-24 15:26   回复 1250988207093321728
    • A lonely cat  回复 @阿酷
      不用,你直接在标签那里写上 JavaWeb 就行。 还有 @码划云,你真是坏透了!
      A lonely cat 2022-02-24 15:46   回复 1204736502274318336
    • 码划云  回复 @阿酷
      哈哈哈 他是男的
      码划云 2022-02-24 15:48   回复 1231137268748521472
    1. 正常来说线程池启动,因为线程池有优化,复用旧的
    2. 不正常来说,比如你线程没跑完,你就退了页面,这不就gg了吗
    3. 通常处理,页面退出的时候,把未停止的线程中断。
    1139423796017500160  评论     打赏       断点-含光君
    • 阿酷  回复 @断点-含光君
      评论区大佬大多数从事 Android 方向 、我写的是 JavaWeb ,应该不存在浏览器页面关闭,线程中断的操作 emmm
      阿酷 2022-02-24 14:55   回复 1250988207093321728
    • 阿酷  回复 @断点-含光君
      最有可能的就是文件不存在 ,可能会报空指针,空指针中断了线程是否会造成泄漏
      阿酷 2022-02-24 14:56   回复 1250988207093321728
    • 断点-含光君  回复 @阿酷
      不好意思我犯病了,嘻嘻
      断点-含光君 2022-02-24 14:57   回复 1139423796017500160
  • 在我意识内 这是封装好的 也没单独说要销毁操作 就应该是会自动回收销毁的 我刚刚百度了下也是会销毁 看看大佬们怎么说

    1382711465131241472  评论     打赏       阿肥
    • 码划云  回复 @阿肥
      只要任务结束了 是会自动回收的 但是直接new不够优雅
      码划云 2022-02-24 12:02   回复 1231137268748521472
    • 阿酷  回复 @码划云
      不 new 怎么才能优雅一点
      阿酷 2022-02-24 13:30   回复 1250988207093321728
    • 阿酷  回复 @阿肥
      那意思是 我这样写是可以的咯对吗
      阿酷 2022-02-24 13:30   回复 1250988207093321728
    • 码划云  回复 @阿酷
      可以的
      码划云 2022-02-24 13:49   回复 1231137268748521472
    • 码划云  回复 @阿酷
      不用线程池的话 我的做法是把他那个new ConvertThread抽出来 搞成成员变量 方便管理 不用的时候或者退出的时候就释放掉咯 还有你这个应该可以直接 new ConvertThread().start()了 不用在包一层new Thread
      码划云 2022-02-24 13:56   回复 1231137268748521472
    • 阿酷  回复 @码划云
      哈哈好、我改一下,能跑就行
      阿酷 2022-02-24 14:36   回复 1250988207093321728
  • 感谢多位评论区大佬的解答,感谢感谢 [抱拳] ,最佳答案给了字最多的哥哥哈哈哈哈

    1250988207093321728  评论     打赏       阿酷
    相关问题
    吕氏春秋 · java / 多线程并发
    2020-03-19 03:46 859 4
    2020-04-10 18:02 484 5
    linver · 线程 / java
    2021-03-21 18:51 943 2
    热爱android · android线程切换
    2022-11-22 13:46 59 5
    你好,孙耀耀 · java / 多线程
    2023-01-08 15:21 52 10
    幻影~ · 安卓
    2024-04-26 19:25 2 4
    deanhu · AOSP
    2024-04-25 21:53 3 10
    幻影~ · 提问
    2024-04-13 20:13 10 2
    幻影~ · 找工作
    2024-04-07 10:44 16 2
    幻影~ · 问题
    2024-03-31 17:20 7 2
    TONYGFX · AOSP
    2024-03-28 17:11 4 2