Android - выполнять поток повторно - PullRequest
0 голосов
/ 16 марта 2012

Я новичок в программировании Android и темы.Я хочу получить изображение с удаленного сервера и отобразить его.(это работает до сих пор ^^) Но изображение с камеры, и поэтому мне нужен новый, как только я покажу тот, который я скачал ранее.Это означает, что Тема никогда не должна прекращать захват изображения.(Пока существует активность.)
Также я просто хочу установить 1 соединение с сервером, а затем просто выполнить HTTP-получение.Поэтому у меня должен быть параметр «соединение», который может использовать поток.

Чтобы получить представление, он должен работать примерно так (но, очевидно, нет):

private class DownloadImageTask extends AsyncTask<URLConnection, Void, Bitmap> {
    /** The system calls this to perform work in a worker thread and
      * delivers it the parameters given to AsyncTask.execute() */
   private URLConnection connection = null;
    protected Bitmap doInBackground(URLConnection...connection ) {
        this.connection = connection[0];
        return getImageFromServer(connection[0]);
    }
    protected void onPostExecute(Bitmap result) {
        pic.setImageBitmap(result);
        this.doInBackground(connection);
    }
}

Ответы [ 3 ]

0 голосов
/ 16 марта 2012

Может быть лучше использовать Thread здесь, так как AsyncTask - это когда задание заканчивается в какой-то момент.Что-то вроде ниже может работать для вас.Кроме того, вам лучше использовать местный Service

protected volatile boolean keepRunning = true;
private Runnable r = new Runnable() {
    public void run() {
        // methods are a bit bogus but it should you give an idea.
        UrlConnection c = createNewUrlConnection();
        while (keepRunning) {
            Bitmap result = getImageFromServer(c);
            // that probably needs to be wrapped in runOnUiThread()
            pic.setImageBitmap(result);
        }
        c.close();
    }
};
private Thread t = null;

onResume() {
    keepRunning = true;
    t = new Thread(r);
    t.start();
}

onPause() {
    keepRunning = false;
    t = null;
}
0 голосов
/ 16 марта 2012

Асинхронная задача может быть выполнена только один раз ... Задача может быть выполнена только один раз (исключение будет сгенерировано, если будет предпринята попытка повторного выполнения).Я предлагаю лучше использовать службу для загрузки ... или даже поток может быть использован ...

как это

 public void run() {
    while (true) {
        //get image...
    }
}
0 голосов
/ 16 марта 2012

Вы должны установить некоторую задержку для этого, но чтобы исправить это, я думаю, что это должно выглядеть так:

private class DownloadImageTask extends AsyncTask<URLConnection, Void, Bitmap> {
/** The system calls this to perform work in a worker thread and
  * delivers it the parameters given to AsyncTask.execute() */
private URLConnection connection = null;
protected Bitmap doInBackground(URLConnection...connection ) {
    this.connection = connection[0];
    return getImageFromServer(connection[0]);
}
protected void onPostExecute(Bitmap result) {
    pic.setImageBitmap(result);
    this.execute("...");
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...