AsyncTask не работает на WallpaperService - PullRequest
0 голосов
/ 13 декабря 2011

Я хочу загружать некоторые ресурсы параллельно, чтобы они быстрее загружались в обоях.Поэтому я решил использовать AsyncTask в службе обоев Android.Ниже приведен код, который я использовал.Я был шокирован, узнав, что AsyncTask вызывается синхронно, а также что onPostExecute никогда не выполняется.Какова причина?Есть ли альтернатива?

@Override
    public Engine onCreateEngine() {
        Log.d("PER", "onCreateEngine");

    new DownloadWebPageTask().doInBackground("test");
    for (int i = 0; i < 30; i++) {

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d("ASYNC", "DownloadWebPageTask aftersleep outside thread");
    }
    return new CubeEngine();
}

private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        String response = "";
        Log.d("ASYNC", "DownloadWebPageTask start");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.d("ASYNC", "DownloadWebPageTask aftersleep inside thread");
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        Log.d("ASYNC", "DownloadWebPageTask end");
    }
}

1 Ответ

2 голосов
/ 13 декабря 2011

Вы никогда не должны звонить doInBackground напрямую.Вам нужно позвонить execute, как указано в документах .Вот почему ваша задача выполняется в том же потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...