From 54b7024109dbee45e58c36a6723659707cdf5e3e Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Mon, 2 Apr 2018 15:11:17 +0800 Subject: [PATCH] fix(inrt): duplicate script executions --- .../stardust/auojs/inrt/autojs/AutoJs.java | 1 + .../autojs/ScriptExecutionGlobalListener.java | 39 +++++++++++++++++++ .../inrt/launch/AssetsProjectLauncher.java | 8 +++- inrt/src/main/res/values/strings.xml | 2 + 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 inrt/src/main/java/com/stardust/auojs/inrt/autojs/ScriptExecutionGlobalListener.java diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java index fb255594..08095089 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/AutoJs.java @@ -34,6 +34,7 @@ public class AutoJs extends com.stardust.autojs.AutoJs { private AutoJs(Application application) { super(application); + getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener()); } diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/autojs/ScriptExecutionGlobalListener.java b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/ScriptExecutionGlobalListener.java new file mode 100644 index 00000000..678ba0f0 --- /dev/null +++ b/inrt/src/main/java/com/stardust/auojs/inrt/autojs/ScriptExecutionGlobalListener.java @@ -0,0 +1,39 @@ +package com.stardust.auojs.inrt.autojs; + +import com.stardust.app.GlobalAppContext; +import com.stardust.auojs.inrt.R; +import com.stardust.autojs.execution.ScriptExecution; +import com.stardust.autojs.execution.ScriptExecutionListener; + +/** + * Created by Stardust on 2017/5/3. + */ + +public class ScriptExecutionGlobalListener implements ScriptExecutionListener { + private static final String ENGINE_TAG_START_TIME = "com.stardust.scriptdroid.autojs.Goodbye, World"; + + @Override + public void onStart(ScriptExecution execution) { + execution.getEngine().setTag(ENGINE_TAG_START_TIME, System.currentTimeMillis()); + } + + @Override + public void onSuccess(ScriptExecution execution, Object result) { + onFinish(execution); + } + + private void onFinish(ScriptExecution execution) { + Long millis = (Long) execution.getEngine().getTag(ENGINE_TAG_START_TIME); + if (millis == null) + return; + double seconds = (System.currentTimeMillis() - millis) / 1000.0; + AutoJs.getInstance().getScriptEngineService().getGlobalConsole() + .verbose(GlobalAppContext.getString(R.string.text_execution_finished), execution.getSource().toString(), seconds); + } + + @Override + public void onException(ScriptExecution execution, Exception e) { + onFinish(execution); + } + +} diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java index 33d93fe1..cc01165d 100644 --- a/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java +++ b/inrt/src/main/java/com/stardust/auojs/inrt/launch/AssetsProjectLauncher.java @@ -11,6 +11,7 @@ import com.stardust.auojs.inrt.LogActivity; import com.stardust.auojs.inrt.Pref; import com.stardust.auojs.inrt.autojs.AutoJs; import com.stardust.autojs.execution.ExecutionConfig; +import com.stardust.autojs.execution.ScriptExecution; import com.stardust.autojs.project.ProjectConfig; import com.stardust.autojs.script.JavaScriptFileSource; import com.stardust.pio.PFiles; @@ -29,6 +30,7 @@ public class AssetsProjectLauncher { private ProjectConfig mProjectConfig; private Context mActivity; private Handler mHandler; + private ScriptExecution mScriptExecution; public AssetsProjectLauncher(String projectDir, Context context) { mAssetsProjectDir = projectDir; @@ -62,9 +64,13 @@ public class AssetsProjectLauncher { } private void runScript() { + if (mScriptExecution != null && mScriptExecution.getEngine() != null && + !mScriptExecution.getEngine().isDestroyed()) { + return; + } try { JavaScriptFileSource source = new JavaScriptFileSource("main", mMainScriptFile); - AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() + mScriptExecution = AutoJs.getInstance().getScriptEngineService().execute(source, new ExecutionConfig() .executePath(mProjectDir)); } catch (Exception e) { AutoJs.getInstance().getGlobalConsole().error(e); diff --git a/inrt/src/main/res/values/strings.xml b/inrt/src/main/res/values/strings.xml index 16d7fa2f..59d0b15d 100644 --- a/inrt/src/main/res/values/strings.xml +++ b/inrt/src/main/res/values/strings.xml @@ -20,4 +20,6 @@ 打开应用后直接运行脚本 其他 Powered by Auto.js + \n------------\n[%s]运行结束,用时%f秒 +