Я новичок в android.Imm приложение для создания приложения для прослушивания входящего сообщения через WiFi, он отлично работает для прослушивания и обновления пользовательского интерфейса, но когда я пытаюсь выйти из него, он не отвечает на нажмите кнопку до тех пор, пока не получите сообщение в буфере. С моей точки зрения, кнопки находятся в потоке пользовательского интерфейса, а Runnable - это отдельный поток, и поэтому он не отвечает на нажатие кнопки сразу же, когда он занят отдельной ветвью. Итак, как я могу прерывать нажатие кнопки «Runnable»?Как остановить или выйти из режима «Runnable»
Любая помощь будет высоко оценена.
public Runnable mUpdate = new Runnable() {
public void run() {
try {
line = in.readLine();
newtext.setText(line);
mHandler.post(this);
Log.i("RESPONSE FROM SERVER", "S: Received Message: '" +line+ "'");
//onBackPressed();
//threadRunning = true;
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("Error" , "Something Happen");
}
}
};
Edit: К сожалению, я должен был пост об этом раньше, так и в "OnCreate", я использую обработчик для вызова "mUpdate". Правильно ли это позвонить или нет?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
intent = getIntent();
setContentView(R.layout.activity_display_message);
message = intent.getStringArrayExtra(MainActivity.EXTRA_MESSAGE);
newtext = (TextView)findViewById(R.id.TextView1);
userName = message[0];
serverIP = message[1];
sendConnectionRequest();
mHandler = new Handler(); // Handler to update UI
mHandler.post(mUpdate); // post is a method to update UI
}
'прерывания()' просто устанавливает флаг прерывания. Ответственный за выполненный код должен проверить этот флаг и закончить его надлежащим образом. – afk5min
@ afk5min да и нет. Хотя в этом случае больше да, чем нет. Он имеет другие эффекты в зависимости от текущего состояния потока. Я изменил ответ, чтобы исправить это. http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#close%28%29 –
Если поток находится в ожидании блокировки, генерируется InterruptedException, но это исключение проверено; исполняемый код вынужден обрабатывать эту ситуацию. (Кроме того, приведенный выше пример не использует ожидающий блокировки) – afk5min