ich eine AsyncTask in meiner Anwendung haben:Kraft eine Sperr stoppen lesen 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;
}
...
}
Und ich will task
AsyncTask stoppen, wenn ich meine Anwendung zu schließen: (Presse zurück putton). Ich habe versucht, die Antwort hier Android - Cancel AsyncTask ForcefullyisCancelled()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
task.cancel(true);
mySocket.close();
finish();
}
return super.onKeyDown(keyCode, event);
}
zu überprüfen, aber es scheint, dass die Anwendung wird bei myInputstream.read(readbyte)
blockieren, wenn task.cancle(true)
genannt wird. Android wird ein "App reagiert nicht mehr ..." Pop-up zu mir werfen. Wie kann ich das Blockieren des Lesevorgangs erzwingen?
Fangen Sie irgendwelche Ausnahmen in doInBackground? Es sollte eine InterruptedException geben. – Fildor
@Fildor sollte es eine "java.io.InterruptedIOException" sein, aber nur, wenn der Stream eine Unterbrechung unterstützt. – SpaceTrucker
Sie sagen: "Es scheint, dass die Anwendung bei' myInputstream.read (readbyte) '" blockiert. Wie sicher bist du, dass das tatsächlich der Fall ist? – SpaceTrucker