Я очень новой для Android программирования, так пожалуйста, простите мое невежество ...состояние сигнал от обработчика postDelayed?
Я пытаюсь сделать простой Android приложение:
- Пользователь нажимает на кнопку, начинает postDelayed работу, а затем ожидает на условная переменная
после тайм-аута задания postDelayer должен сигнализировать
private final static long TIMEOUT = 10000; private Handler mHandler; final Lock lock = new ReentrantLock(); final Condition condition = lock.newCondition(); @Override protected void onCreate(Bundle savedInstanceState) { ... mHandler = new Handler(); ... } private void timeOutSignal() { mHandler.postDelayed(new Runnable() { @Override public void run() { Log.d(">> ", "---> timeout notify"); lock.lock(); try { condition.signal(); // releases lock and waits until doSomethingElse is called } finally { lock.unlock(); } } }, TIMEOUT); } public void buttonClick(View view) { timeOutSignal(); Log.i("???", "... WAIT"); lock.lock(); try { condition.await(); } catch (InterruptedException e) { // todo } finally { lock.unlock(); } Log.i("???", "... WAIT DONE !"); }
Что происходит, так это то, что buttonClick() застрял в ожидании, и я даже не вижу сообщение «---> timeout notify» после таймаута ...
Что я делаю неправильно?
EDIT: Пытался исправить перепутались пример ...
Да .. мне плохо - я пропустил это, нажав кнопку. То, что я на самом деле делаю, - это попытка сканирования устройств BluetoothLowEnergy ... Так что в timeOutSignal() (неправильное имя, но я действительно хотел сделать простой сниппет ...) Я вызываю BluetoothAdapter startScan() и планирую (с postDelayed) stopScan() с таймаутом 10 с. – V0idd