как отобразить тост без завершения загрузки контекста

1

моя игра занимает много времени, чтобы загрузить с фона. во время загрузки экран черный (примерно 5-7 секунд, поэтому пользователь может подумать, что он сбой).

я решил показать тост при входе на передний план.

    protected void onResume() {

        System.out.println("onResume method called");
        Context context = getBaseContext();
//      Context context = getApplicationContext();
        CharSequence text = "i appreciate your patience";

        Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG);

        toast.show();


        super.onResume();
        wl.acquire();
        if (accelerometerEnabled) {
            accelerometer.enable();
        }
    }

но тост появляется только после того, как он закончил возобновление (что делает его бесполезным). Я пробовал getApplicationContext, getBaseContext, а также сам Activity. так можно ли добавить тост прямо в окно без контекста моего приложения? (возможно, в контексте системного уровня)

Теги:
notifications
toast

2 ответа

2

Я думаю, что это связано с загрузкой вашей игры в потоке пользовательского интерфейса, когда он возвращается с фона

Попробуйте переместить всю логику, зависящую от нитей, зависящую от пользовательского интерфейса, в AsyncTask.

Это должно позволить вашему сообщению тоста быть видимым во время загрузки вашей игры.

  • 0
    можно вместо этого поставить тост за асинктазу (и как?) я не думаю, что возможно поместить мою игровую логику там. при входе на передний план я просто возобновляю представление OpenGL.
  • 0
    Ваш тост должен вызываться из потока пользовательского интерфейса, поэтому он не должен переходить к асинхронной задаче. Что касается перезапуска представления OpenGL, у вас должно быть состояние рендеринга, которое ожидает асинхронной загрузки ваших игровых данных. Другими словами, когда ваша игра возобновится, появится ДЕЙСТВИТЕЛЬНО легкий экран «загрузки», и начните всю предварительную обработку в другом потоке. Когда ваша предварительная обработка завершится, возобновите рендеринг. Причина, по которой вы получаете задержку, заключается в том, что ваша поверхность воссоздается, когда вы выходите из фона, и вы пытаетесь перестроить свою логику в потоке пользовательского интерфейса.
1

Здесь может оказаться полезным заставка. Просто поместите всплывающий экран, охватывающий весь ваш пользовательский интерфейс в xml, а затем запустите процесс загрузки в асинтете. в asynctask onPostExecute, установите видимость заливки на Gone.

Не забывайте обрабатывать изменение ориентации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню