7

在我的应用程序中,我得到了一个线程,它每 60 秒检查一次来自 web 服务的数据(在 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 之后。有什么想法可以让两者都工作吗?

提前致谢。

4

2 回答 2

7

可能您想阅读以下来源:

Instrumentation.java

public void callActivityOnUserLeaving(Activity activity) {
   activity.performUserLeaving();}

活动.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() :当活动由于用户选择而即将进入后台时,作为活动生命周期的一部分调用。也就是说,当你要离开活动时,它会被调用。例如,在您的行为中开始另一项活动。
于 2015-02-03T11:16:58.780 回答
1

Android 文档非常清楚地说明了这一点。它指出 :

public void onUserInteraction ()

每当将键、触摸或轨迹球事件分派到活动时调用。如果您希望知道用户在您的活动运行时以某种方式与设备进行了交互,请实施此方法。这个回调和 onUserLeaveHint() 旨在帮助活动智能地管理状态栏通知;具体来说,用于帮助活动确定取消通知的适当时间。

对活动的 onUserLeaveHint() 回调的所有调用都将伴随对 onUserInteraction() 的调用。这可以确保您的活动将被告知相关的用户活动,例如下拉通知窗格并触摸那里的项目。

请注意,此回调将为开始触摸手势的触摸动作调用,但可能不会为随后的触摸移动和触摸动作调用。

于 2014-07-18T12:15:28.857 回答