как остановить бесконечные потоки цикла от службы Android? - PullRequest
1 голос
/ 01 октября 2011

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

Я написал класс обслуживания следующим образом:

ServiceApp.java

    public class ServiceApp extends Service
    {
  @Override
  public IBinder onBind(Intent arg0) {
    return null;
  }

@Override
public void onCreate() {
    super.onCreate();

    while(true)
    {
    Thread child1=new Thread(new Runnable() {

        @Override
        public void run() {

            try {

                function1();

            } catch (InterruptedException e) {

                e.printStackTrace();
            }

        }
    });

    child1.start();

    Thread child2=new Thread(new Runnable() {

        @Override
        public void run() {

            try {


                function2();



            } 
            catch (InterruptedException e) {

                e.printStackTrace();
            }
        }
    });

    child2.start();


    Thread child3=new Thread(new Runnable() {

        @Override
        public void run() {

            try {


                function3();


            } catch (InterruptedException e) {

                e.printStackTrace();
            }       
        }
    });

    child3.start();

Toast.makeText(ServiceApp.this, "All threads started", Toast.LENGTH_SHORT).show();

}
}

public void function1() throws InterruptedException
{
    Generic generic=new Generic(); //this for connect to web services

    String add=generic.getAdd(10,20);

    Log.v("function1", "addition from service"+add); 

    Thread.sleep(1000);

}

public void function2() throws InterruptedException
{

    Generic generic=new Generic(); //this for connect to web services

    String sub=generic.getSub(34,20);

    Log.v("function2", "subtraction from service"+sub); 

    Thread.sleep(1000);
}

public void function3() throws InterruptedException
{

    Generic generic=new Generic(); //this for connect to web services

    String mul=generic.getMul(4, 6);

    Log.v("function3", "multipicationn from service"+mul); 

    Thread.sleep(1000);
}

}

как я могу остановить потоки child1, child2, child3 из класса активности?

пожалуйста, какое-нибудь тело поможет мне?

1 Ответ

1 голос
/ 01 октября 2011

Service.onCreate() выполняется внутри потока пользовательского интерфейса.У вас там бесконечный цикл, который непрерывно создает все больше потоков, поэтому пользовательский интерфейс не получает возможности реагировать на действия пользователя.Если вы на самом деле намереваетесь иметь так много потоков, вам нужно создать другой поток, который будет запускать исходные три.

Activity может взаимодействовать со службой либо через Binder (вам нужно будет вернуть фактическую реализацию вместоnull там) или отправив намерения, которые вы можете захватить и обработать в Service.onStart()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...