Я пытаюсь реализовать способ инициировать запрос данных наложения карты (с внешнего веб-сервера) только тогда, когда это кажется необходимым.
Для этого я думаю о том, чтобы иметь события касания экранавызвать счетчик во внешнем потоке, если пользователь наводит курсор на область карты, не касаясь экрана в течение секунды, и отправляется запрос.
Поток событий будет выглядеть примерно так:1007 * У меня проблемы с получением UIthread, чтобы остановить вызов wait () в методе и выдать исключение InterruptException, поэтому я вышел из тела метода, прежде чем он сможет выполнить запрос.Я в основном хочу просто обойти любую очередь сообщений для потока и сделать так, чтобы она немедленно прекратила выполнение, хотя я не уверен, что это возможно.Я здесь на трассе?Мой код для этого показан ниже:
public class ExtendedMapView extends MapView {
private final static int DOWN_PRESS = 1;
private final static int RELEASE_PRESS = 2;
private Handler countThreadHandler;
private TouchThread touchMonitor ;
public ExtendedMapView(Context context, AttributeSet attrs) {
super(context, attrs);
touchMonitor = new TouchThread();
touchMonitor.start();
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch(ev.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d("TEST", "Touch Screen");
touchMonitor.interrupt();
break;
case MotionEvent.ACTION_UP:
Log.d("TEST", "Touch released");
countThreadHandler.sendMessage(Message.obtain(countThreadHandler,RELEASE_PRESS));
break;
default:
break;
}
return super.onTouchEvent(ev);
}
private class TouchThread extends Thread {
@Override
public void interrupt() {
super.interrupt();
Log.d("TEST", "Thread interrupted");
}
@Override
public synchronized void run() {
try {
Looper.prepare();
countThreadHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case DOWN_PRESS:
runOnDown();
break;
case RELEASE_PRESS:
runOnUp();
break;
}
};
Looper.loop();
Log.d("TEST", "thread started");
} catch (Throwable t) {
t.printStackTrace();
Log.d("TEST", "thread not started");
}
}
private synchronized void runOnUp() {
Log.d("TEST", "count started");
downPressed = false;
try {
Log.d("TEST", "Timer started");
wait(1000);
//SEND REST MSG BASED OFF RECIEVED MAP FILL CO-ORDS
Log.d("TEST", "send Rest msg--------------------->");
} catch (InterruptedException e) {
e.printStackTrace();
Log.d("TEST", "Received Interruption NIIICE");
}
}
}
}
Я буду продолжать читать и пробовать в то же время.Спасибо: D