Когда именно вызывается onUserInteraction()?
В моем приложении я получил thrad, который проверяет каждые 60-е данные из веб-службы (определено в onCreate()):
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(PERIOD);
if(condition) do_something();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
Кроме того, я получил обработчик, выполняющий метод после периода неактивности пользователя:
private Handler disconnectHandler = new Handler();
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
do_something_else();
}
};
public void resetDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, TIMEOUT);
}
@Override
public void onUserInteraction() {
super.onUserInteraction();
resetDisconnectTimer();
}
Теперь у меня возникла проблема, что onUserInteraction() вызывается также после PERIOD, а не только после TIMEOUT. Любые идеи, чтобы заставить оба работать?
Заранее спасибо.
2 ответа
Может быть, вы хотите прочитать источник ниже:
Instrumentation.java
public void callActivityOnUserLeaving(Activity activity) {
activity.performUserLeaving();}
Activity.java
final void performUserLeaving() {
onUserInteraction();
onUserLeaveHint();}
public boolean dispatchKeyEvent(KeyEvent event) {
onUserInteraction();
...
}
public boolean dispatchKeyShortcutEvent(KeyEvent event) {
onUserInteraction();
.....
}
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
....
}
public boolean dispatchTrackballEvent(MotionEvent ev) {
onUserInteraction();
....
}
public boolean dispatchGenericMotionEvent(MotionEvent ev) {
onUserInteraction();
....
}
onUserInteraction () вызывается как показано ниже:
- как документ,onUserInteraction Вызывается всякий раз, когда в действие отправляется событие нажатия клавиши, касания или трекбола. "Взаимодействует" имеет значение. Так что все "XXEvent" будут вызывать этот метод.
- doc: "Все вызовы обратного вызова onUserLeaveHint() вашей активности будут сопровождаться вызовами onUserInteraction()." onUserLeaveHint(): Вызывается как часть жизненного цикла действия, когда действие собирается перейти в фоновый режим в результате выбора пользователя. то есть, когда ты собираешься покинуть активность, это будет вызвано. например, начать другое действие в вашем акте.
Документация по Android делает это очень ясным. Говорится:
public void onUserInteraction ()
Вызывается при отправке события, нажатия клавиши или трекбола в действие. Реализуйте этот метод, если вы хотите знать, что пользователь каким-то образом взаимодействовал с устройством во время работы. Этот обратный вызов и onUserLeaveHint() предназначены для того, чтобы помочь действиям интеллектуально управлять уведомлениями в строке состояния; в частности, для оказания помощи деятельности определить подходящее время для отмены уведомления.
Все вызовы обратного вызова onUserLeaveHint() вашей активности будут сопровождаться вызовами onUserInteraction(). Это гарантирует, что вашей активности будет сообщено о соответствующей активности пользователя, такой как раскрытие панели уведомлений и касание элемента там.
Обратите внимание, что этот обратный вызов будет вызываться для действия касания, которое начинает жест касания, но не может вызываться для последующих действий касания и касания.