Ist es möglich, dass eine Callback-Methode nach onDestroy aufgerufen wird?
In der neuesten Version meiner App ist bei einigen Benutzern ein Absturz aufgetreten, den ich nicht reproduzieren kann. Derzeit nurSamsung
Geräte, auf denen @ ausgeführt wiLollipop
haben das Problem, aber das könnte Zufall sein. Nachdem ich den Stack-Trace und den relevanten Code analysiert habe, glaube ich, dass ich den Schuldigen gefunden habe. Um meine Vermutung zu testen, habe ich den Code auf das folgende Snippet vereinfacht:
public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button b = new Button(this);
b.setText("Click me!");
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run() {
// This is the callback method
Log.d("TAG", "listenerNotified");
}
});
}
});
setContentView(b);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("TAG", "onDestroy");
}
}
Jedes Mal teste ich die obige Anwendung, indem ich zuerst auf das @ tippKlick mic -Taste und dann die Zurück-Taste,listenerNotified
wird auf die Konsole gedruckt, bevoronDestroy()
.
Ich bin mir aber nicht sicher, ob ich mich auf dieses Verhalten verlassen kann. HatAndroid
irgendwelche Garantien über das obige Szenario machen? Kann ich davon ausgehen, dass meinRunnable
wird immer vor @ ausgefühonDestroy()
oder gibt es ein szenario, in dem das nicht der fall ist? In meiner realen App passiert natürlich viel mehr (wie bei anderen Threads, die im Haupt-Thread posten, und mehr Operationen, die im Rückruf stattfinden). Aber dieser einfache Ausschnitt schien ausreichend zu sein, um meine Besorgnis zu demonstrieren.
Ist es möglich (möglicherweise aufgrund des Einflusses anderer Threads oder Rückrufe, die an den Haupt-Thread gesendet wurden), dass ich die folgende Debug-Ausgabe erhalte?
D/TAG: onDestroy
D/TAG: listenerNotified
Ich würde das gerne wissen, da dieses Ergebnis den Absturz erklären würde.