在我的应用程序中,我得到了一个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之后调用。 有任何想法让两者都有效吗?
提前致谢。
答案 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 :(得分:0)
Android文档非常清楚。它声明:
public void onUserInteraction ()
每当将key,touch或trackball事件分派给活动时调用。如果您希望知道用户在您的活动运行时以某种方式与设备进行了交互,请实施此方法。此回调和onUserLeaveHint()旨在帮助活动智能地管理状态栏通知;特别是,帮助活动确定取消通知的适当时间。
对活动的onUserLeaveHint()回调的所有调用都将伴随对onUserInteraction()的调用。这可确保您的活动将被告知相关的用户活动,例如拉下通知窗格并触摸那里的项目。
请注意,此调用将针对开始触摸手势的触碰操作调用,但可能不会针对随后的触摸移动和触摸操作调用。