我是Android编程和线程新手。我想从远程服务器获取图片并显示它。 (到目前为止工作^^)
但是这张照片来自相机,所以一出现我之前下载的那张照片就需要一张新照片。这意味着,线程永远不应该停止抓取图片。 (只要活动存在。)
另外,我只想与服务器建立1个连接,然后只进行HTTP-gets。所以我必须有一个Thread可以使用的参数“连接”。
要获得一个想法 - 它应该像这样工作(但显然不是):
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);
}
}
答案 0 :(得分:0)
你应该为它设置一些延迟,但为了解决这个问题,我认为它应该是这样的:
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("...");
}
}
答案 1 :(得分:0)
最好在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;
}
{{1}}
答案 2 :(得分:0)
异步任务只能执行一次...... 该任务只能执行一次(如果尝试第二次执行,则会抛出异常。) 看到这个..关于AsyncTask的文档 documentation on AsyncTask 我建议你使用服务下载更好... 甚至可以使用线程...
像这样 public void run() {
while (true) {
//get image...
}
}