2011-01-10 12 views
8

Ich erweitere BroadcastReceiver, und in onReceive() mache ich, was ich tun muss.BroadcastReceiver onReceive Timeout

onReceive() hat einen Timeout, aus der Dokumentation:

ein Timeout von 10 Sekunden ist, dass das System vor den Empfänger unter Berücksichtigung erlaubt blockiert und einen Kandidaten werden zu

getötet werden

Dies schafft ein Problem, wenn ich im Debug-Modus bin. Ich brauche mehr als 10 Sekunden (manchmal). Wenn ich nicht in 10 Sekunden mein gesamtes Debugging ausführe, wird meine Verbindung geschlossen und das Debuggen gestoppt.

Kann ich das Zeitlimit erhöhen oder für Debugging-Zwecke deaktivieren?

Danke.

+0

Wenn Sie Dinge tun, die mehr als nur einen Bruchteil einer Sekunde in Ihrem Rundfunkempfänger benötigen, tun Sie es falsch. – Falmarri

+4

Lesen Sie meinen Kommentar unten. Ich spreche über DEBUG-Modus. –

Antwort

11

Um Ihre Anwendung von Kraft Schließung zu verhindern, während Sie auf einen Bruchpunkt beim Debuggen angehalten werden, versuchen Sie die Tools-Anwendung und aktivieren Sie die Debug App Einstellung Dev Installation, die:

Sie Lets Wählen Sie die Anwendung debug. Sie brauchen nicht dieses ein Debugger anhang zu setzen, aber Setzen diesen Wertes hat zwei Effekte:

  • Es wird Android verhindern, dass ein Fehler zu werfen, wenn Sie für eine lange Zeit, während des Debuggen auf ein Unterbrechungs pausieren .

Alle Details sind hier: http://developer.android.com/tools/debugging/debugging-devtools.html

Wenn Sie etwas in Ihrem onReceive Verfahren kompliziert tun werden, dann betrachten Sie Ihre BroadcastReceiver ein Service und geben es aus onReceive wird entlang der Daten starten zu müssen. Die Service kann dann die längere Verarbeitung erledigen.

+1

Das ist richtig. Der einzige Zweck eines Broadcast-Empfängers sollte sein, Daten an etwas anderes weiterzuleiten. – Falmarri

+1

Jungs, ich stimme dir zu. Du hast recht. In einer Release-Version sollte es nicht so lange dauern. Aber ich rede im DEBUG-Modus, wenn ich über meinen Code debugge. –

+0

Es spielt keine Rolle, dass Sie sich im "DEBUG" -Modus befinden. Sie möchten den Empfänger dennoch sofort an eine andere Komponente weiterleiten lassen, wahrscheinlich einen Service wie empfohlen.Das ist das richtige Design und es wird einfacher sein, zu debuggen und Fehler zu beheben sowie Empfänger-Timeouts zu verursachen (machen Sie Ihre Protokollierung, oder was auch immer länger dauert, im Service). –

1

Ich habe dieses Problem auch im Debug-Modus festgestellt. Es stellt sich heraus, dass eine andere Sendung gesendet wurde und nicht bearbeitet wurde, weil ich die andere Sendung im Hauptthread debuggte. Android betrachtete meinen Prozess in ANR und tötete den gesamten Prozess.

Ich musste den Code vorübergehend ändern, um die andere Sendung nicht aufzurufen, während ich mein Debugging ausführte.

+0

Wie genau haben Sie es geändert? Ich habe das gleiche Problem. – Para

+0

@Para, ich habe den Code auskommentiert, der Broadcasts in dem Abschnitt gesendet hat, den ich debugging, beginnend mit dem Breakpoint. –

Verwandte Themen