Во-первых : Вы хотите, чтобы код в операторе finally
всегда выполнялся?Потому что, как написано, вы не сможете выйти из потока без обновления вашего уведомления.
Если все в порядке, просто позвоните timer.interrupt()
, что вызовет ваш обработчик InterruptedException, а затем вызовите ваш finally
block - если вы не хотите прерывать потоки и действительно чувствуете привязанность к вашему потоку, вы всегда можете использовать защелку для его освобождения.
public class SomeDamnedActivity extends Activity {
// ... misc junk ...
private CountDownLatch mLatch;
private Thread mThread;
protected void onCreate(Bundle savedInstanceState) {
mLatch = new CountDownLatch(1);
mThread = new Thread() {
public void run() {
try {
mLatch.await(8, TimeUnit.SECONDS);
} catch (InterruptedException e) {
Log.w(TAG, "Interrupted waiting for latch to release", e);
} finally {
// Stuff goes here that you want to execute.
}
}
};
}
protected void onPause() {
// ...
mLatch.countDown(); // This will release the latch "prematurely" calling your finally-statement.
}
(К вашему сведению: AsyncTask, вероятно,лучшая идея или размещение Runnable
в View в макете, используя View#postDelayed(Runnable, long)
)