Android AsyncTask的doInBackground不执行问题

在Android开发中,遇到AsyncTask的doInBackground方法不执行的情况。原因是从3.0版本开始,AsyncTask默认在单线程中运行,如果前一个实例还未完成,后续实例会被阻塞。本文通过分析发现,由于前一个任务执行了长时间的网络请求,导致后续任务的doInBackground被延迟执行,尤其是在网络状况不佳时,可能导致17秒的等待时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在写一个小程序的时候,遇到一个问题:一个activity页面的AsyncTask的doInBackground不执行。

试着在doInBackground里面打印了下log,确认是走不到doInBackground里面:

        @Override
        protected Result<JokeInfo> doInBackground(Integer... params) {
            Log.e("archie", "doInBackground");
            Result<JokeInfo> rel = new Result<JokeInfo>();
            rel = new JokeStore(mContext).getJokes(0);
            return rel;
        }

找了半天,最终确认了原因:
AsyncTask在3.0版本以后,默认的执行方式变成了单线程,也就是说,如果有另外一个AsyncTask的实例在执行,那别的实例就必须等待,等到这个实例执行完。

而我在这个activity之前的页面中,先执行了一个AsyncTask的实例,而且我的这个实例中的doInBackground中,执行了一个网络请求,这个请求的timeout很长:

        // 超时设置
        /* 从连接池中取连接的超时时间 */
        ConnManagerParams.setTimeout(params, 3000);
        /* 连接超时 */
        HttpConnectionParams.setConnectionTimeout(params, 50000);
        /* 请求超时 */
        HttpConnectionParams.setSoTimeout(params, 120000);

同时我的网络又是有问题的,所以导致我的timeout加起来有17秒之长,所以在17秒内,后一个页面的AsyncTask的doInBackground是肯定不会执行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值