2012-01-13 3 views

답변

-1

, 나는이 같은 사람이하고 작업입니다 :

Thread welcomeThread = new Thread() { 
@Override 
public void run() { 
    try { 
     super.run(); 
     while (isMyServiceRunning() != true) { 
      sleep(100); 
     } 
    } catch (Exception e) { 
     System.out.println("EXc=" + e); 
    } finally { 
     Intent i = new Intent(getApplicationContext(), MainPage.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(i); 
    } 
} 
}; 

welcomeThread.start(); 
+2

야, 나는 ... ... U가 활동을 시작 r에 서비스를 시작하는 방법에 대한 질문 – carora3

+0

그래서, 뭐? startActivity를 startService (i)로 변경하십시오. –

+0

그 dint는 잘 작동합니다. (모든 것이 괜찮은 것처럼 보이면 그냥 도청됩니다. – carora3

2

http://developer.android.com/reference/android/app/Service.html

에서 인용 "참고 자신의 호스팅 프로세스의 메인 쓰레드에서 실행되는 다른 응용 프로그램 객체 등의 서비스, 즉, 서비스가 CPU 집중적 인 작업 (예 : MP3 재생) 또는 차단 (네트워킹과 같은) 작업을 수행하는 경우 해당 작업을 수행 할 자체 스레드를 생성해야합니다. 이에 대한 자세한 정보는 찾을 수 있습니다 IntentService 클래스는 서비스의 표준 구현으로 사용할 수 있습니다. 할 일을 스케쥴하는 자신의 실 "이라고 말했다.

+0

나는 이미 그것을 읽었다. 새 스레드에서 내 서비스를 실행하는 방법을 파악할 수 없습니다. 나는이 포럼에서 다른 질문의 코드로 시도했지만, 나를 위해 일한다. – carora3

+0

여기에 IntentService를 사용하셨습니까? http://developer.android.com/reference/android/app/IntentService.html – Stefan

+0

다음과 같이 WorkerThread를 만들 수도 있습니다. private final class WorkerThread extends Thread { \t public Handler handler; \t @ 재정의 \t 공개 무효 run() { \t Looper.prepare(); \t this.핸들러 = 새로운 핸들러() { \t @Override \t 공공 무효의 handleMessage (최종 메시지 MSG) { \t 스위치 (msg.what) { \t \t 경우 MSG_DO_MY_JOB : \t \t \t // ... \t \t 휴식 ; \t \t 사례 MSG_STOP : YourOuterClass.this.stopSelf(); \t \t 중단; \t} } }; Looper.loop(); } } 서비스가 만들어지면 작업자를 시작하고 처리를 원하는 메시지를 처리기로 보냅니다. – Stefan

8

_onStartpublic void onStart(final Intent intent, final int startId) 방법 이름을 바꾸고 새로운 onStart 구현을 사용

@Override 
public void onStart(final Intent intent, final int startId) { 
    Thread t = new Thread("MyService(" + startId + ")") { 
     @Override 
     public void run() { 
      _onStart(intent, startId); 
      stopSelf(); 
     } 
    }; 
    t.start(); 
} 

private void _onStart(final Intent intent, final int startId) { 
    //Your Start-Code for the service 
} 

API 레벨 5

public void onStart(Intent, int) 위를 API 레벨 5에서 ​​사용되지 않습니다 이것은 public int onStartCommand(Intent, int)로 대체해야

@Override 
public int onStartCommand(final Intent intent, final int startId){ 
    //All code from 'onStart()' in above placed here as normal. 
} 

private void _onStart(final Intent intent, final int startId) { 
    //Your Start-Code for the service 
} 
+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –

+1

@MD 무엇을 의미합니까? 그것은 분명히 답을 제공합니다 ... 아마 다른 게시물을 의미할까요? – theomega

+1

시작 직후 왜'stopSelf();'인가? –

3

새 스레드에서 서비스를 시작할 수 있다고 생각하지 않지만 서비스에서 새 스레드를 시작하는 것이 좋습니다.

활동과 마찬가지로 서비스에는 주 스레드에서 실행되는 수명주기 메소드가 있기 때문입니다.

서비스가 주 스레드에서 실행되지만 필요에 따라 생성되는 새 스레드에서 무거운 작업을 수행합니다. 나는 그것이 도움이되기를 바랍니다

..

관련 문제