我正在尝试从Web服务器连续下载图像。下面显示的是代码
public class HMIActivity extends Activity implements Observer{
private ImageView imageView;
public HMIActivity()
{
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hmi);
}
@Override
protected void onStart()
{
super.onStart();
ImageDownloader imageDownloader = new ImageDownloader("http://192.168.5.109/hmi/img.jpg",this);
Thread thread = new Thread(imageDownloader);
thread.start();
imageView = (ImageView) findViewById(R.id.imageView1);
}
public void update(Observable obj,Object data)
{
HTTPCommunicator httpCommunicator = (HTTPCommunicator)data;
System.out.println("length----"+httpCommunicator.bytes.length);
}
图片下载器类的代码
public class ImageDownloader implements Runnable{
private final String urlToDownloadImage;
private HMIActivity hmiActivity;
private int NTHREADS = 10;
ExecutorService executor = Executors.newFixedThreadPool(NTHREADS);
public ImageDownloader(String url,HMIActivity _hmiActivty)
{
this.urlToDownloadImage = url;
hmiActivity = _hmiActivty;
}
@Override
public void run(){
while(true){
HTTPCommunicator httpCommunicator = new HTTPCommunicator(this.urlToDownloadImage);
httpCommunicator.addObserver(this.hmiActivity);
executor.execute(httpCommunicator);
}
}
}
htppcommunicator类的代码
public class HTTPCommunicator extends Observable implements Runnable {
String urlToDownloadImage;
private final int HTTP_CONNECTION_TIMEOUT = 10*1000;
public byte bytes[];
public HTTPCommunicator(String urlToDownloadImage)
{
this.urlToDownloadImage = urlToDownloadImage;
}
@Override
public void run() {
// TODO Auto-generated method stub
try
{
URL url = new URL(urlToDownloadImage);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(HTTP_CONNECTION_TIMEOUT);
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
if(inputStream != null)
{
bytes = IOUtils.toByteArray(inputStream);
setChanged();
notifyObservers(this);
}
}
catch(MalformedURLException _exception)
{
Log.e("HTTPCommunicator","Malformed url exception");
}
catch(UnknownHostException _exception)
{
Log.e("HTTPCommunicator","Check Internet Connection!!!");
}
}
}
此代码只能正常运行1分钟,然后引发以下所示的异常
01-24 12:50:15.379: E/AndroidRuntime(912): FATAL EXCEPTION: pool-1-thread-7
01-24 12:50:15.379: E/AndroidRuntime(912): java.lang.OutOfMemoryError
我不确定如何解决此问题。请帮我。
最佳答案
好吧,而不是手动下载图像,请尝试延迟加载图像。
对于延迟加载,您在android中有很多选择
1。
UIL
2 Android Smart Image View
这样您就不会出现内存不足的异常。