Возможно ли вызвать метод обратного вызова после onDestroy?
В последней версии моего приложения некоторые пользователи испытывают сбой, который я не могу воспроизвести. Только в настоящее времяSamsung
устройства, работающиеLollipop
возникают проблемы, но это может быть просто совпадением. После анализа трассировки стека и соответствующего кода, я думаю, что, возможно, нашел виновника. Чтобы проверить мое предположение, я упростил код до фрагмента ниже:
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");
}
}
Каждый раз, когда я тестирую вышеуказанное приложение, сначала нажимаяНажми на меня кнопку, а затем кнопку назад,listenerNotified
выводится на консоль раньшеonDestroy()
.
Однако я не уверен, могу ли я положиться на это поведение. Есть лиAndroid
сделать какие-либо гарантии по поводу вышеописанного сценария? Могу ли я с уверенностью предположить, что мойRunnable
всегда будет выполняться раньшеonDestroy()
или есть сценарий, где это не будет иметь место? В моем реальном приложении, конечно, происходит намного больше (как другие потоки, отправляющие сообщения в основной поток, и больше операций, выполняемых в обратном вызове). Но этот простой фрагмент казался достаточным, чтобы продемонстрировать мою заботу.
Это возможно (возможно, из-за влияния других потоков или обратных вызовов, отправленных в основной поток), что я получаю выходные данные отладки ниже?
D/TAG: onDestroy
D/TAG: listenerNotified
Я хотел бы знать это, так как возможный исход объяснил бы крах.