2014-01-22 5 views
0

Есть ли способ вызвать действие из того, что не расширяет действие? без запуска его на UI-протекторах. Я хочу тост-сообщения в своей игре, как в конфетке. Но я не знаю, как эффективно вызывать тост-активность в режиме реального времени.Вызывающая активность из класса, который не расширяет действие

Я знаю, что вы можете использовать контекст и получать от этого активность, но он работает не очень гладко. Есть ли у кого-нибудь опыт в том, как это сделать?

ответ

1

Toasts, а также другие компоненты, которые управляют пользовательским интерфейсом, не должны использоваться вне потока пользовательского интерфейса.

Что вы можете сделать, чтобы решить вашу проблему, - это разработать систему обмена сообщениями между нитью, управляющей вашей игрой, и вашим потоком пользовательского интерфейса. Для этого вы можете использовать Handler и свои средства обмена сообщениями (sendMessage, post, postDelayed ...) для отправки сообщений или даже Runnables для запуска в основной теме.

Если вы создаете Handler в основном потоке, он автоматически свяжется с циклом событий основного потока, тем самым каждая работа, отправленная ему, будет выполнена в основном потоке.

Основной пример того, что вы могли бы сделать:

class MainActivity extends Activity { 

    // The handler is associated with your Activity's thread 
    private Handler _handler = new Handler(); 
    // ... 

    private Thread _worker = new Thread() { 

     @Override 
     public void run() { 
      _handler.post(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(MainActivity.this, "Some text", Toast.LENGTH_SHORT).show(); 
      } 
      }); 
     } 
    }; 
}; 

В стенографии, вы можете также использовать Activity.runOnUiThread(Runnable r), который выполняет данный работоспособной в потоке пользовательского интерфейса по умолчанию.

+0

У меня есть класс для моего потока, я не создаю его в своей основной деятельности. Но я думаю, что понимаю, что вы говорите. Так что, если у меня есть только 3-5 сообщений, я могу использовать сокращенный метод без значительного влияния на игру? Придется подойти к обработчикам ближе, совершенно новым для меня –

+0

Да, вместо этого ваши сообщения будут обрабатываться в потоке пользовательского интерфейса. Если вы демонстрируете тост в разумных темпах, производительность не должна быть проблемой. –

+0

Благодарим вас за это! Причина, по которой я думал, что я не должен вставлять ее в UI-поток, - это то, что я делаю с моим «полным уровнем» экрана, и это, как правило, немного медленнее. Но попробуй это :) –

Смежные вопросы