Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android Mailversand bei "schlechtem Netz" (https://www.delphipraxis.net/198005-android-mailversand-bei-schlechtem-netz.html)

skoschke 26. Sep 2018 06:23

Android Mailversand bei "schlechtem Netz"
 
Hallo,

in meiner App werden Mails erzeugt und versendet.
Nun kommt es aber vor, dass der Anwender "irgendwo im Wald steht" und schlechten bis gar keinen Empfang hat...

Dann läuft die Senderoutine sehr langsam und irgendwann kommt Android und meldet, dass die App nicht mehr reagiert und geschlossen werden soll :-(
Das möchte ich verhindern, nur fehlt mir der richtige Ansatz!

- Das Senden in einen Thread verlagern, bringt das was?
- nicht selbst senden sondern einen Intent lostreten? Was passiert da bei schlechtem Empfang?
- welche anderen Möglichkeiten seht Ihr?

Ciao
Stefan

Der schöne Günther 26. Sep 2018 07:22

AW: Android Mailversand bei "schlechtem Netz"
 
Ich habe noch nie gesehen dass eine Anwendung über selbstgebauten Kram (z.B. Indy-Komponenten) Mails verschickt sondern den Mail-Mechanismus des Betriebssystems nutzt. Wenn es nicht klappt bleibt die Mail halt solange im Postausgang stecken und wird gesendet wenn wieder Empfang da ist, trotzdem muss sich der Entwickler um nichts weiter kümmern.

hoika 26. Sep 2018 07:35

AW: Android Mailversand bei "schlechtem Netz"
 
Hallo,
Zitat:

Ich habe noch nie gesehen dass eine Anwendung über selbstgebauten Kram (z.B. Indy-Komponenten) Mails verschickt
Ich schon, z.B. bei meinem eigenen Programm.

Jasocul 26. Sep 2018 07:45

AW: Android Mailversand bei "schlechtem Netz"
 
[OT]
@Der schöne Günther:
Natürlich gibt es sehr viele derartige Programme. Jedes E-Mail-Programm muss das machen. Outlook gehört übrigens nicht zum Betriebssystem. Ich habe auch ein paar Anwendungen bei denen das erforderlich ist, da zwar der Mail-Server bekannt ist, aber kein Mail-Client auf dem lokalen Rechner ist.
[/OT]

@skoschke:
Spontan folgende Ideen:
1. Du kannst den Versand auch über den Mail-Client auf dem Gerät lösen. Dann kümmert sich dieser darum.
2. Du prüfst die Konnektivität und sendest erst, wenn es geht. Allerdings musst du auf immer noch auf einen Verbindungsabbruch reagieren. Du kannst da zum Beispiel auf ein Time-Out reagieren und über einen Timer einen neuen Versuch starten, falls notwendig.
3. In einen Thread auslagern und bei Verbindungsverlust den Thread pausieren.

Schokohase 26. Sep 2018 08:15

AW: Android Mailversand bei "schlechtem Netz"
 
Ich befürchte der Günther hat im Kontext der Frage geantwortet (Android Betriebssystem) und keine generelle Aussage zu allen Betriebssystem (die die wir schon kennen und die die wir noch nicht kennen) getroffen.

knaeuel 26. Sep 2018 08:33

AW: Android Mailversand bei "schlechtem Netz"
 
brian long hat eine demo veröffentlicht, in der er genau das macht.

Eine der Funktionen der App "Activities" ist das Erzeugen einer mail, um die sich das Betriebssystem kümmert

vielleicht kürzt es ja die Entwicklungszeit ab :)

Blogeintrag:
http://blog.blong.com/2017/11/codera...-directly.html

Sources:
http://blong.com/Downloads/CodeRageX...eAndroidAPI.7z

skoschke 26. Sep 2018 09:05

AW: Android Mailversand bei "schlechtem Netz"
 
Ja, klar, bei Crossplattformentwicklung und App hatte ich vorausgesetzt, dass man erkennt dass es eine Android-App ist ;-)

Und damit sind wir bei Übergabe an das Betriebssystem:
Bei Mailversand per Intent geht das Mailprogramm auf und der Benutzer muss erst "Senden" klicken.
Das ist umständlich und da auch noch 3 Mails in diesem Zusammenhang versendet werden, das Ganze mal drei.

Das möchte ich dem Nutzer nicht zumuten.
Oder gibt es einen Trick, die Mail per Intent wirklich direkt zu versenden die ich noch nicht kenne, ohne Benutzerklicks?

Ciao
Stefan

skoschke 26. Sep 2018 09:07

AW: Android Mailversand bei "schlechtem Netz"
 
Zitat:

In einen Thread auslagern und bei Verbindungsverlust den Thread pausieren.
Kommt Android bei einem Thread auch wenn der "länger nicht reagiert" und will den abschießen wie bei meiner App?

Ciao
Stefan

DeddyH 26. Sep 2018 09:08

AW: Android Mailversand bei "schlechtem Netz"
 
Nein

TurboMagic 28. Sep 2018 18:45

AW: Android Mailversand bei "schlechtem Netz"
 
Zitat:

Zitat von skoschke (Beitrag 1414181)
- Das Senden in einen Thread verlagern, bringt das was?

Wenn man den E-Mail Versand selber machen muss, dann bringt das Auslagern in einen thred etwas. Warum?
Ganz einfach: im anderen Fall läuft alles im Hauptthread der Anwendung ab und wenn der Netzwerkaufruf
blockierend ist (wie m.W. bei Indy) blockiert das den Hauptthread, der auch für die Aktualisierung
des GUI zuständig ist.

Zumindest in Windows würden dann keine Windows Botschaften mehr abgerufen und das Betriebssystem würde
nach einem Timeout diese "Reagiert nicht" Meldung bringen. Ich vermute stark, dass der Mechanismus in
Android ähnlich funktioniert.

Grüße
TurboMagic

skoschke 29. Sep 2018 08:11

AW: Android Mailversand bei "schlechtem Netz"
 
OK, nehme ich einen Thread dann wird das Hauptprogramm nicht mehr blockiert, Android sollte (hoffe ich) dann nicht mehr "Anwendung reagiert nicht, soll sie beendet werden" melden.

Was passiert mit dem Thread wenn der Anwender im Handy die App "abschießt", läuft der Thread weiter oder ist diese Mail dann "verloren"?

Und noch dümmer, was passiert wenn der Anwender das Handy neu startet, während der Thread noch was zu tun hat?

Ciao
Stefan

Schokohase 29. Sep 2018 09:02

AW: Android Mailversand bei "schlechtem Netz"
 
Es passiert das Gleiche, als wenn du ein Programm beendest und deine Änderungen nicht speicherst.

TurboMagic 30. Sep 2018 20:44

AW: Android Mailversand bei "schlechtem Netz"
 
Was passiert bisher bei deiner Lösung wenn der Anwender während des Sendens der E-Mail die App beendet?
Richtig, die E-Mail wird nicht gesendet, weil das Senden abgebrochen wird, da deine App beendet wird.

Was passiert bei Verlagern in einen thread?
Ganz einfach: wann wird der Thread beendet?

Wenn seine Execute Methode durchgelaufen ist. Dazu sind folgende punkte wichtig:

1. d.h. der Thread sollte, so fern er beim Beenden des Programmes noch läuft mittels Terminate
signalisiert bekommen, dass er beendet werden soll.

2. der Thread sollte im Execute an diversen Stellen mal das Terminated Flag prüfen um ggf.
sich vorzeitig zu beenden (exit aufrufen). Ist man höflich, könnte man evtl. noch versuchen
die Verbindung zum Mailserver zu schließen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz