Android AsyncTask的doInBackground不执行问题

今天在写一个小程序的时候,遇到一个问题:一个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是肯定不会执行的。

你可能感兴趣的:(android开发,bug处理)