什么时候调用onUserInteraction()?

时间:2014-07-18 12:00:30

标签: android multithreading sleep user-interaction postdelayed

在我的应用程序中,我得到了一个thrad,它检查来自webservice的每60s数据(在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();
}

现在我遇到的问题是,在PERIOD之后调用onUserInteraction()并且不仅在TIMEOUT之后调用。 有任何想法让两者都有效吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

可能您想阅读以下来源:

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. 作为doc,onUserInteraction每当将key,touch或trackball事件分派给活动时调用。 "互动"意义重大。所以" XXEvent"将调用此方法。
  2. doc:"所有对您活动的onUserLeaveHint()回调的调用都会伴随对onUserInteraction()的调用。" onUserLeaveHint():当活动即将发生时,作为活动生命周期的一部分调用 作为用户选择的结果进入后台。也就是说,当你要离开活动时,它会被召唤。例如,在你的行为中开始另一项活动。

答案 1 :(得分:0)

Android文档非常清楚。它声明:

public void onUserInteraction ()
  

每当将key,touch或trackball事件分派给活动时调用。如果您希望知道用户在您的活动运行时以某种方式与设备进行了交互,请实施此方法。此回调和onUserLeaveHint()旨在帮助活动智能地管理状态栏通知;特别是,帮助活动确定取消通知的适当时间。

     

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

     

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