Ho un AsyncTask nella mia domanda:Forza fermare un blocco lettura AsyncTask
public class myActivity extends Activity {
private static Socket mySocket;
private static InputStream myInputstream;
private AsyncTask task;
private boolean connected = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
task = new UpdateTask().execute();
...
}
private class myTask extends AsyncTask<Void, String, String> {
@Override
protected String doInBackground(Void... v) {
if(!connected) {
try {
mySocket = new Socket();
mySocket.connect(new InetSocketAddress(MYIP, MYPORT));
myInputstream = mySocket.getInputStream();
connected = true;
} catch(IOException e) { ... }
}
while(connected && !isCancelled()) {
byte[] readbyte = new byte[1024];
try {
myInputstream.read(readbyte);
} catch (IOException e) { ... }
...
}
return null;
}
...
}
E voglio smettere AsyncTask task
quando chiudo la mia domanda: (premere indietro putton). Ho provato la risposta qui Android - Cancel AsyncTask Forcefully per controllare isCancelled()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
task.cancel(true);
mySocket.close();
finish();
}
return super.onKeyDown(keyCode, event);
}
ma sembra che l'applicazione si blocca in myInputstream.read(readbyte)
quando task.cancle(true)
si chiama. Android salterà una "app smette di rispondere .." popup a me. Come posso forzare l'interruzione della lettura del blocco?
Rilevate eccezioni in doInBackground? Ci dovrebbe essere un InterruptedException. – Fildor
@Fildor dovrebbe essere un 'java.io.InterruptedIOException', ma solo se il flusso supporta l'interruzione. – SpaceTrucker
Si dice "sembra che l'applicazione si blocchi a' myInputstream.read (readbyte) '". Come sei sicuro che questo sia effettivamente il caso? – SpaceTrucker