2012-11-17 5 views
0

나는 별도의 프로세스에서 실행되는 서비스를 구현했습니다.서비스를 실행하는 방법은 무엇입니까?

이 서비스에는 소켓 연결이있는 별도의 스레드가 있습니다. 이 스레드는 데이터를 포트로 계속 전송하고있는 run()을 가지고 있습니다.

내 문제는 스레드에서 run()을 트리거 한 후에 더 이상 그와 접촉하지 않습니다. 프로그램에서 의식적으로 데이터를 전송하지만 아이디어가 그 프로그램을 볼 수 있습니다. 실행되는 동안 예제로 보내는 데이터를 변경할 수 있습니다. 여기

내 외부 스레드에서 실행됩니다 :

public void run() 
{ 

     if(run) 
      { 

      // Team and player names message is sent when entering in a game 

      setBaseMessage(); 
      SendMessageToCOMPort(base_message + CalculateCRC(base_message)); 
      sleep(); // waits for 100 ms 
      } 
} 

사람은 누구나 잘못 될 일을 어떤 생각을 가지고?

+0

음 지금은 타이머와 타이머 작업을 사용하여 달리기 대신 다른 방법을 찾았습니다. – user1497664

+0

다른 방법을 찾은 경우 직접 답변을 게시 할 수 있습니다. – joel

+0

낮은 점수가 필요하므로 정말 미안 답변을 게시 할 수 있습니다. 하지만 난이 istead 같은 타이머 작업을 사용 : 'code' 개인의 TimerTask 작업을 = 새의 TimerTask() { @Override 공공 무효 실행() { \t \t \t setNamesTeamsPlayerMessage(); \t \t \t setBaseMessage(); \t \t \t SendMessageToCOMPort (base_message + CalculateCRC (base_message)); \t \t \t sleep(); 'code' – user1497664

답변

0

나는 당신의 문제를 잘 이해하지 못했습니다. 일부 소켓 통신을 수행하는 별도의 스레드를 서비스에서 실행하려고하는 것 같습니다. 또한 스레드가 소켓을 사용하여 보내는 데이터에 영향을 줄 수 있기를 원합니다.

나는 별도의 프로세스에서 실행되는 서비스를 구현했습니다.

우선 안드로이드 서비스는 기본적으로 별도의 프로세스 나 스레드에서 실행되지 않습니다. 따라서 장기 실행 작업을 실행하려면 Java 스레딩을 사용하여 자체적으로 멀티 스레딩을 개발하고 실행 방법을 구현해야합니다.

단일 프로세스의 스레드는 동일한 메모리를 공유합니다. 따라서 소켓 스레드가 수행중인 작업에 영향을주기 위해 스레드간에 공유되는 큐 또는 목록과 같은 데이터 구조를 사용할 수 있습니다. 예를 들어 생산자 - 소비자 패턴을 적용 할 수 있습니다. 생산자는 데이터를 공유 대기열로 전달합니다. 소비자는 대기열에서 데이터를 사용하여 처리합니다. 그러나 공유 대기열에 대한 액세스를 동기화해야한다는 점에 유의하십시오.

문제를 명확히하고 문제를 해결하기위한 조언을 드릴 수 있기를 바랍니다.

관련 문제