Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When exactly is onUserInteraction() called?

in my app I got a thrad that checks every 60s data from a webservice (defined in 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();

Additionally i got a handler executing a method after a period of user inactivity:

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();
}

Now I got the problem that onUserInteraction() is called after PERIOD too and not only after TIMEOUT. Any ideas to get both working?

Thanks in advance.

like image 683
Second2None Avatar asked Jul 18 '14 12:07

Second2None


1 Answers

may be you want read the source below:

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() be called as below:

  1. as the doc ,onUserInteraction Called whenever a key, touch, or trackball event is dispatched to the activity. "interacted"is significant. So all "XXEvent" will call this method.
  2. doc : "All calls to your activity's onUserLeaveHint() callback will be accompanied by calls to onUserInteraction()." onUserLeaveHint() : Called as part of the activity lifecycle when an activity is about to go into the background as the result of user choice. that is, when u is going to leave activity, it be called. such as , start another activity in your act.
like image 97
Evan Avatar answered Sep 18 '22 08:09

Evan