Когда именно вызывается 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 () вызывается как показано ниже:

  1. как документ,onUserInteraction Вызывается всякий раз, когда в действие отправляется событие нажатия клавиши, касания или трекбола. "Взаимодействует" имеет значение. Так что все "XXEvent" будут вызывать этот метод.
  2. doc: "Все вызовы обратного вызова onUserLeaveHint() вашей активности будут сопровождаться вызовами onUserInteraction()." onUserLeaveHint(): Вызывается как часть жизненного цикла действия, когда действие собирается перейти в фоновый режим в результате выбора пользователя. то есть, когда ты собираешься покинуть активность, это будет вызвано. например, начать другое действие в вашем акте.

Документация по Android делает это очень ясным. Говорится:

public void onUserInteraction ()

Вызывается при отправке события, нажатия клавиши или трекбола в действие. Реализуйте этот метод, если вы хотите знать, что пользователь каким-то образом взаимодействовал с устройством во время работы. Этот обратный вызов и onUserLeaveHint() предназначены для того, чтобы помочь действиям интеллектуально управлять уведомлениями в строке состояния; в частности, для оказания помощи деятельности определить подходящее время для отмены уведомления.

Все вызовы обратного вызова onUserLeaveHint() вашей активности будут сопровождаться вызовами onUserInteraction(). Это гарантирует, что вашей активности будет сообщено о соответствующей активности пользователя, такой как раскрытие панели уведомлений и касание элемента там.

Обратите внимание, что этот обратный вызов будет вызываться для действия касания, которое начинает жест касания, но не может вызываться для последующих действий касания и касания.

Другие вопросы по тегам