fix(inrt): duplicate script executions

This commit is contained in:
hyb1996 2018-04-02 15:11:17 +08:00
parent b381f28470
commit 54b7024109
4 changed files with 49 additions and 1 deletions

View File

@ -34,6 +34,7 @@ public class AutoJs extends com.stardust.autojs.AutoJs {
private AutoJs(Application application) {
super(application);
getScriptEngineService().registerGlobalScriptExecutionListener(new ScriptExecutionGlobalListener());
}

View File

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

View File

@ -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);

View File

@ -20,4 +20,6 @@
<string name="summary_dont_show_main_activity">打开应用后直接运行脚本</string>
<string name="text_others">其他</string>
<string name="powered_by_autojs">Powered by Auto.js</string>
<string name="text_execution_finished" formatted="false">\n------------\n[%s]运行结束,用时%f秒</string>
</resources>