线程睡眠在一个异步任务中暂停应用程序中的其他Async taks

时间:2016-04-06 15:57:13

标签: android multithreading asynchronous

假设我想在一个异步任务中睡眠线程。

代码:

 protected Weather doInBackground(Void... params) {
       try {
                Thread.sleep(10000);
            } catch (Exception ex) {

            }
}

这会导致应用程序中的其他异步任务暂停。为什么? 我的意图不是暂停线程,但网络调用需要一些时间,这会暂停应用程序中的所有异步任务。

如何解决这个问题?

这就是我调用异步任务的方式

WeatherAsync weatherAsync = new WeatherAsync(Pref.getString(getApplicationContext(), Pref.local.WEATHER_CITY), null, null,
                new WeatherAsync.WeatherAsyncCallback() {
                    @Override
                    public void onCancelled() {

                    }

                    @Override
                    public void onPreExecute() {

                    }

                    @Override
                    public void onPostExecute(Weather result) {
                        if (result == null) {
                            return;
                        }
                        Log.d("Temp", "" + result.getTemp());
                        //adapter.addWeather(new NavigationDrawerItem(result, NavigationDrawerItem.WEATHER_VIEW));
                    }
                });
        weatherAsync.execute();

1 个答案:

答案 0 :(得分:1)

AsyncTask API文档说明如下:

  

首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。

也就是说,如果你正在运行一个相对现代的Android,那么你的AsyncTask就会发生在同一个线程中。要继续API文档:

  

如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])。

这只是在Android上执行多线程内容的一种方式。您也可以使用普通的旧线程来实现多线程。