Возможно ли вызвать метод обратного вызова после 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

Я хотел бы знать это, так как возможный исход объяснил бы крах.

Ответы на вопрос(3)

Ваш ответ на вопрос