2016-07-18 42 views
1

Ich habe v8 in meinem Android-Projekt über J2V8 eingebettet. Das funktioniert gut, aber es gibt Situationen, in denen das Skript hängt (wahrscheinlich aufgrund einer Art von Endlosschleife, nehme ich an). Der Code ist viel zu kompliziert, um es zu debuggen und es kann immer eine Situation geben, in der ein Skript verrückt läuft.Kann ich die Ausführung von JavaScript in J2V8 beenden?

Um sicher zu gehen, dass kein Zombie-Thread herumhängt und die Batterie entleert, möchte ich ein Timeout definieren und v8 beenden, wenn das Skript noch nicht zurückgegeben wurde. Natürlich führe ich das Skript unter AsyncTask oder IntentService aus und niemals im Hauptthread. Auf diese Weise schützt sich Android nicht selbst und zeigt eine "Anwendung reagiert nicht" (ANR). Der Hintergrund Thread läuft und läuft und läuft ...

Wie v8 auf saubere Weise zu töten?

Antwort

1

Ich habe übersehen diese Methode auf V8-Objekt:

/** 
* Terminates any JavaScript executing on this runtime. Once 
* the runtime is released, any executors that were spawned 
* will also be force terminated. 
*/ 
public void terminateExecution() { 
    forceTerminateExecutors = true; 
    terminateExecution(v8RuntimePtr); 
} 
+0

Ja, das ist die richtige Methode. Und im Gegensatz zu anderen Methoden in J2V8 kann dies von jedem Thread aufgerufen werden. – irbull