103/174 本文约1500字 预计阅读时间 7 分钟
随着ChatGPT的流行,他就像位百事通一样,能够干的事情很多,写文案、翻译、出策划、讲故事等等,之前我分享过几篇文章:ChatGPT替代者Monica的高阶玩法
这篇文章价值千金,用ChatGPT大幅提高工作效率的方法
而对于程序员来说,日常代码不是在写代码,就是在调试bug,遇到棘手的bug时总是一筹莫展,如果能用好ChatGPT,能提高排查问题的效率,今天我们就来举一个栗子:
熟悉我的朋友都知道,我以前是位程序员,最近几年才转行做产品。不过,公司最近有个项目开发了一个Android应用,恰好客户提了一个挺急的bug,最近大家忙得没时间维护了,这块以前是我熟悉的领域,安卓老鸟一枚,于是我就客串了一把研发,打开许多未见的老朋友Android Studio,开始排查问题起来。
问题是啥呢?就是APP在使用过程中,用着用着就莫名其妙闪退了。
好在我们拿到了问题日志,通过打印信息很快定位到了是空指针异常,看代码发现是由于有个子线程没有释放资源导致的。我是久疏编码,不记得怎么释放资源了,放在以往我就百度一下,从一堆搜索结果中去找答案。今天我尝试了下ChatGPT,于是我问他:
1.请问在Android的Activity中new Thread之后要如何在关闭应用的时候释放资源,请给出代码示例。
不得不说,现在GPT对自然语言的理解挺深,立马就回复我:
?
嗯嗯,我立马就回忆起来了,对,需要定义一个变量,然后在onDestroy方法中停止线程并释放资源。
然后我按这个方法调试了一下,还是不行呢。
2.于是我继续问他:但是我执行mThread.interrupt()后没有生效,还是跑到了Thread的run方法中去了,这是为什么呢?
因为我用的是基于ChatGPT API的网页端应用monica,我们姑且称呼他叫小m,他又很快答复我:
?
我立马根据他的提示看了下以前写的代码里,run方法中居然用的是while(true)循环,好家伙,难怪线程退不出去,于是我就照着小m告诉我的改了一波,继续调试,在页面关闭之后,这个线程还在执行,怎么还销毁不了呢?
3.继续问小m:为什么我按上述方法修改了代码,并且执行了mThread.interrupt()方法后,依然还是跑到了Thread中的run方法去了呢?
然后小m给了我如下回答:
?
看示例代码跟上次的回答一样,但是他说的第一句话提醒了我:如果您的线程在调用 interrupt ()方法后仍然继续执行,可能是因为您的线程在执行耗时操作时没有正确地检查中断标志。
然后我再分析代码,我看到子线程里有了线程休眠20秒的操作,很可能是因为我在试图中断线程的时候,正在休眠,所以导致线程没有get到中断指令。
知道了这个之后,于是我就更有针对性的问起来:如何在Thread的run方法在运行Thread.sleep的时候,执行mThread.interrupt()方法后能够中断Thread的运行呢?
然后小m给了我终极答案:
?
确实,我代码里有捕获interruptException异常,但是没有执行interrupt方法去中断线程,怪不得没有生效。然后我就照此方法又调试了一遍,真香,当关闭页面的时候,线程终于也关掉了,没有再出现空指针异常。
顺利交差,总共用时半小时,效率真高,ChatGPT就像一位很有经验的大神一样,一步步指点我下一步应该怎么走,但也没有一下子把所有答案都告诉我,毕竟我提的问题关键字也有限,就通过这样的一问一答,也启发了我的思路。
所以,还没有用起来ChatGPT的童鞋们,赶紧用起来,多了一个随叫随到的大神帮你解决问题,效果杠杠滴。
如果还没有用过Monica的童鞋,可以点击查看这篇文章学习如何使用:
推荐一款可以替代ChatGPT的神器,国内网络就能用,每天免费对话30次
若大家在使用过程中遇到什么问题,欢迎私信或者留言给我。
更多内容,欢迎关注微信公众号:吴言不语零一二三
创业项目群,学习操作 18个小项目,添加 微信:luao319 备注:小项目!
如若转载,请注明出处:https://www.fqkj168.cn/9292.html