Когда вы создаете обработчик, связанный с основным петлителем, вы должны помнить, что он связан с основным потоком.Поэтому вызывать Thread.sleep в основном потоке абсолютно не рекомендуется, и его следует избегать.Тосты также используют поток пользовательского интерфейса, но вы предотвращаете его появление, замораживая этот поток.Шаги, выполняемые в вашем коде, следующие:
- Действие, чтобы показать первый тост, ставится в очередь
Действие, чтобы показать второй тост, ставится в очередь
// Выполнение первого действия
- Задержка потока на 3 секунды
Показ первого тоста в очереди
// Здесь должен появиться первый тост, ноэто не происходит в тот момент, когда вы вызвали метод.Рассматривайте его как очередное сообщение, поставленное в очередь в главном цикле
- Переведите нить в спящий режим на 3 секунды
- Показывает, что второй тост ставится в очередь
- Показывается первый тост
- Показан второй тост
В конце показываются оба тоста, но вы можете видеть только последний, потому что он показан после первого и закрывает его.Если вы хотите показать два тоста с небольшой задержкой, используйте метод пост-задержки или что-то вроде:
final Handler handler = new Handler(Looper.getMainLooper());
final Context context = getApplicationContext();
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Showing from main activity",
Toast.LENGTH_SHORT).show();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Showing from main activity new",
Toast.LENGTH_SHORT).show();
}
}, 3000);
}
});