Остановка потока через определенное время Android
Коллеги, необходимо принудительно завершить поток если он работает больше 6 секунд.
@Override
public void onClick(View v) {
ProgressDialog dialog = ProgressDialog.show(PressFindD.this, "", "Пожалуйста, подождите, выполняется расчёт");
startCalculating.setClickable(false);
new Thread() {
public void run() {
if (!checkNotNull()) {
dialog.dismiss();
startCalculating.setClickable(true);
return;
}
preparationCalculateD();
if (main()) {
Intent intent = new Intent(PressFindD.this, OutputResultsFindD.class);
startActivity(intent);
}
dialog.dismiss();
startCalculating.setClickable(true);
}
}.start();
}
Ответы (1 шт):
Автор решения: Sergey
→ Ссылка
В итоге методом, сам дошел, может не так изящно, но всё же
Thread mainThread = new Thread() {
public void run() {
if (!checkNotNull()) {
dialog.dismiss();
startCalculating.setClickable(true);
return;
}
preparationCalculateD();
if (main()) {
Intent intent = new Intent(PressFindD.this, OutputResultsFindD.class);
startActivity(intent);
}
dialog.dismiss();
startCalculating.setClickable(true);
}
};
//
Thread delayedStopMainTread = new Thread() {
@Override
public void run() {
try {
while (true) {
sleep(6000);
if (mainThread.isAlive()) mainThread.interrupt();
dialog.dismiss();
startCalculating.setClickable(true);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
delayedStopMainTread.start();
mainThread.start();
mainThread.interrupt();