2012-07-02 2 views
8

Я создаю и Android программы, которая должна непрерывно продолжать посылать данные через Bluetooth теперь я использую что-то вроде этого:Как запустить бесконечный цикл в Android без замораживания пользовательского интерфейса?

for(;;) 
{ 
//send message 
} 

хотя это работает замораживает мой пользовательский интерфейс и приложения, как я могу реализовать то же самое без замораживание моего интерфейса?

Уверен, что приложение отправляет данные, когда я контролирую данные.

+3

использование [ 'AsyncTask'] (http://www.google.com.pk/search?q=AsyncTask) –

+0

ли вы на самом деле есть то, что должно быть на экране? Если вы не используете Сервис. Если это так, используйте AsyncTask, как говорит @AdilSoomro. – FoamyGuy

+0

Другим полезным (но длинным) ресурсом будет http://developer.android.com/guide/components/processes-and-threads.html – gobernador

ответ

1

Вам необходимо переместить произведение в другой поток (кроме потока пользовательского интерфейса), чтобы предотвратить ANR.

new Thread(new Runnable(){ 
     @Override 
     public void run(){ 
      Looper.prepare(); 
      //do work here 
     } 
    }).start(); 

выше быстрый и грязный метод Предпочтительный метод в большинстве случаев используется AsyncTask

7

Поместите свой цикл в AsyncTask, Service с раздельной темой или просто в другом потоке рядом с вашей деятельностью. Никогда не делайте тяжелую работу, петли infinte или блокирующие вызовы в основной (UI) Thread.

0

Запустите IntentService, который создаст фоновый поток для запуска вашей службы. Вызовите Looper.prepare() как @YellowJK, а затем вызовите Looper.loop(), когда вам понадобится ваша программа, чтобы ждать чего-то случиться так, что Служба не убита.

@Override 
protected void onHandleIntent(Intent arg0) { 
    Looper.prepare(); 
    //Do work here 
    //Once work is done and you are waiting for something such as a Broadcast Receiver or GPS Listenr call Looper.loop() so Service is not killed 
    Looper.loop(); 
} 
Смежные вопросы