2016-06-19 2 views
4

Wir arbeiten an einer Android App. Wir verwenden die Chilkat-Bibliothek, um die E-Mail-Kommunikation zu handhaben, und es funktioniert gut. Es kann jedoch auch ein "Problem" mit JNI-Kommunikation geben. Aus der Internetforschung und der Diskussion mit Chilkat kann das Problem beinhalten, wie EMOJI in Nachrichten verarbeitet werden.Kannst du einen JNI-Fehler in einer 3rd-Party-Bibliothek vor einem harten Absturz abfangen?

In regelmäßigen Abständen erhalten wir einen Fehler, der die App stürzt und es kommt aus dem Bibliotheksaufruf. Es ist ein einzelner Anruf, der manchmal abstürzt, abhängig von etwas innerhalb der Nachricht selbst. Unser Ruf ist ...

tmpstr=email.getHtmlBody(); 

Der harte Absturz Fehler, den wir bekommen, ist:

JNI erkannter Fehler in der Anwendung: Eingabe ist nicht gültig Modified UTF-8: illegal Startbyte 0xf0

Erneut, einige Internetsuchen auf dieser Nachricht ... das ist anscheinend ein häufigeres Problem als jeder will, aber immer noch angesprochen werden muss. Chilkat arbeitet an einer Lösung, aber in der Zwischenzeit müssen wir mit der App fortfahren.

Was versuche ich herauszufinden, wenn es einen Weg gibt, dass wir den Fehler abfangen und verhindern können, dass die App abstürzt ... vielleicht nur diese Nachricht markieren und mit der nächsten Nachricht fortfahren?

Sehen, wie ich nie versucht habe, einen Fehler von einer 3rd-Party-Bibliothek zu fangen, bin ich nicht sicher, wohin damit zu gehen.

Alle Vorschläge oder Beispiele, die helfen könnten, würden sehr geschätzt werden.

+1

Das klingt nach etwas, was die Autoren der Bibliothek wirklich reparieren müssen, da das, was Sie ohne den Quellcode tun können, begrenzt ist. Allerdings wird Android lassen Sie einen eigenen Dienst in einem eigenen Prozess zu erstellen, und Sie könnten in dieser problematischen Bibliothek nur von Code in diesem bestimmten Prozess aufrufen, so wenn der Absturz der Rest Ihrer App wird nicht so gut, und könnte möglicherweise nützlich wiederherstellen. Der Benutzer kann (?) Trotzdem eine Fehlermeldung sehen. –

+0

Ich würde hinzufügen, dass eine Reparatur für Ihren lib-Anbieter trivial ist, aber große Risiken mit sich bringt, wenn es so "wie es ist" gehalten wird. –

+0

Mit allen einverstanden ... glücklicherweise hat der Anbieter den Fehler behoben. Es zu versuchen, es zu fangen und damit umzugehen, hat nie gut funktioniert. – Peter

Antwort

0

Nun, je nach Fehler können Sie immer versuchen, es zu "reparieren". Die Arbeit mit Legacy-Code ist immer schwierig und alles, was Sie hier tun können, sind einige Hacks.

können Sie einige Dinge tun hier:

  1. try Signale zu fangen
  2. sicherstellen, dass Ihre App nicht Ihre JVM nicht verlassen

Werfen Sie einen Blick hier: http://jnicookbook.owsiak.org/recipe-No-015/ und hier: http://jnicookbook.owsiak.org/recipe-No-016/

Vielleicht finden Sie eine Lösung basierend auf diesen Proben.

Verwandte Themen