diff --git a/.idea/modules.xml b/.idea/modules.xml index 4fac18b4..7e950955 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,8 @@ + - diff --git a/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java b/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java index 765318a0..1e3ab11d 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java +++ b/autojs/src/main/java/com/stardust/autojs/core/looper/Timer.java @@ -1,6 +1,7 @@ package com.stardust.autojs.core.looper; import android.os.Handler; +import android.os.Looper; import android.os.SystemClock; import android.util.Log; import android.util.SparseArray; @@ -27,15 +28,18 @@ public class Timer { mBridges = bridges; mMaxCallbackMillisForAllThread = maxCallbackMillisForAllThread; mHandler = new Handler(); - Log.d(LOG_TAG, "Timer: handler = " + mHandler + ", thread = " + Thread.currentThread()); + } + + public Timer(ScriptBridges bridges, VolatileBox maxCallbackMillisForAllThread, Looper looper) { + mBridges = bridges; + mMaxCallbackMillisForAllThread = maxCallbackMillisForAllThread; + mHandler = new Handler(looper); } public int setTimeout(final Object callback, final long delay, final Object... args) { - Log.d(LOG_TAG, "setTimeout: handler = " + mHandler); mCallbackMaxId++; final int id = mCallbackMaxId; Runnable r = () -> { - Log.d(LOG_TAG, "callFunction: handler = " + mHandler); mBridges.callFunction(callback, null, args); mHandlerCallbacks.remove(id); }; @@ -105,8 +109,6 @@ public class Timer { } public boolean hasPendingCallbacks() { - Log.d(LOG_TAG, "[thread]hasPendingCallbacks:" + (mMaxCallbackUptimeMillis > SystemClock.uptimeMillis())); - Log.d(LOG_TAG, "mMaxCallbackUptimeMillisForAllThreads:" + mMaxCallbackUptimeMillis); return mMaxCallbackUptimeMillis > SystemClock.uptimeMillis(); } diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java index bce4b6e1..bffd3361 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Timers.java @@ -1,6 +1,7 @@ package com.stardust.autojs.runtime.api; import android.os.Handler; +import android.os.Looper; import android.os.SystemClock; import android.util.Log; import android.util.SparseArray; @@ -21,10 +22,12 @@ public class Timers { private VolatileBox mMaxCallbackUptimeMillisForAllThreads = new VolatileBox<>(0L); private Threads mThreads; private Timer mMainTimer; + private Timer mUiTimer; public Timers(ScriptBridges bridges, Threads threads) { mMainTimer = new Timer(bridges, mMaxCallbackUptimeMillisForAllThreads); + mUiTimer = new Timer(bridges, mMaxCallbackUptimeMillisForAllThreads, Looper.getMainLooper()); mThreads = threads; } @@ -44,7 +47,11 @@ public class Timers { if (thread == mThreads.getMainThread()) { return mMainTimer; } - return TimerThread.getTimerForThread(thread); + Timer timer = TimerThread.getTimerForThread(thread); + if (timer == null && Looper.myLooper() == Looper.getMainLooper()) { + return mUiTimer; + } + return timer; } public int setTimeout(Object callback, long delay, Object... args) {