मुझे अपना आवेदन में एक AsyncTask है:सेना एक अवरुद्ध रोक 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;
}
...
}
और मैं AsyncTask task
को रोकने के लिए जब मैं अपने अनुप्रयोग को बंद करना चाहते हैं: (प्रेस वापस putton)। मैं इस सवाल का जवाब यहाँ 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);
}
जाँच करने की कोशिश की लेकिन ऐसा लगता है कि आवेदन myInputstream.read(readbyte)
पर अवरुद्ध कर देगा जब task.cancle(true)
कहा जाता है। एंड्रॉइड एक "ऐप जवाब देना बंद कर देगा .." मुझे पॉप-अप करें। मैं अवरुद्ध पढ़ने को रोकने के लिए कैसे मजबूर कर सकता हूं?
क्या आप doInBackground में किसी भी अपवाद को पकड़ते हैं? एक interruptedException होना चाहिए। – Fildor
@ फ़ील्ड यह 'java.io.InterruptedIOException' होना चाहिए, लेकिन केवल तभी जब स्ट्रीम बाधा का समर्थन करे। – SpaceTrucker
आप कहते हैं "ऐसा लगता है कि एप्लिकेशन' myInputstream.read (readbyte) 'पर अवरुद्ध होगा। आप कितने निश्चित हैं कि वास्तव में यह मामला है? – SpaceTrucker