Как вызвать асинтексу внутри события нажатия кнопки

Я пишу это приложение, где я получаю живые изображения из tcp-соединения, и мне нужно отображать их на ImageViev.

То, что я делаю, вызывает асинтез внутри кнопки. Но, похоже, создает несколько фоновых потоков.

Это код для события нажатия кнопки

btnLive.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { String name = ((Button)v).getText().toString(); if(name.equalsIgnoreCase("Live")) { DataOutputStream dos; DataInputStream dis; String reply; if(config.conn.isConnected()) { dos = new DataOutputStream(config.conn.getOutputStream()); dos.writeBytes("STREAM-LIVE-IMAGES"); dos.flush(); //dis = new DataInputStream(in); in = config.conn.getInputStream(); while (true) { new myTask().execute(in); } } } } catch(Exception ex) { Log.d("Live Button ", "Exception " + ex.getMessage() ); } } }); 

И этот код для asyncTask

  class myTask extends AsyncTask<InputStream, Integer, Bitmap> { protected Bitmap doInBackground(InputStream...in) { Bitmap bmp = null; try { //Do some none UI stuff here and return a value *result byte[] rcvPacket = ReadJpegBinaryAndRemoveDelimiter(in[0]); bmp = BitmapFactory.decodeByteArray(rcvPacket, 0, rcvPacket.length); Log.d("Live Image Streaming ", "Recieved Images: " + rcvPacket.length + " " + bmp); } catch (Exception e) { e.printStackTrace(); } return bmp; } 

 while (true) { new myTask().execute(in); } 

Потому что вы выполняете AsyncTask в цикле, в вашем случае в бесконечном цикле , это не очень хорошо звучит, вам нужно его изменить.

Вам нужно выполнить за пределами цикла. Вы не должны, не делайте этого.

Просто позвони

 new myTask().execute(in); 

Без цикла.

Мне удалось разобраться с фоновым потоком, потому что asynctask не был подходящим вариантом для моей проблемы.

Поэтому я создал отдельный фоновый поток и использовал метод post runnable в представлении изображения для обновления пользовательского интерфейса.