새 스레드에서 서비스를 시작하는 방법. 나는 다른 질문을 보았지만 그것은 나를 위해 일한다. 정상적으로 작동하고 별도의 스레드에서 실행될 때 내 서비스에서 변경해야 할 사항은 무엇입니까? 내 프로젝트에서새 스레드에서 서비스를 시작하려면 어떻게합니까?
답변
, 나는이 같은 사람이하고 작업입니다 :
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();
이 http://developer.android.com/reference/android/app/Service.html
에서 인용 "참고 자신의 호스팅 프로세스의 메인 쓰레드에서 실행되는 다른 응용 프로그램 객체 등의 서비스, 즉, 서비스가 CPU 집중적 인 작업 (예 : MP3 재생) 또는 차단 (네트워킹과 같은) 작업을 수행하는 경우 해당 작업을 수행 할 자체 스레드를 생성해야합니다. 이에 대한 자세한 정보는 찾을 수 있습니다 IntentService 클래스는 서비스의 표준 구현으로 사용할 수 있습니다. 할 일을 스케쥴하는 자신의 실 "이라고 말했다.
나는 이미 그것을 읽었다. 새 스레드에서 내 서비스를 실행하는 방법을 파악할 수 없습니다. 나는이 포럼에서 다른 질문의 코드로 시도했지만, 나를 위해 일한다. – carora3
여기에 IntentService를 사용하셨습니까? http://developer.android.com/reference/android/app/IntentService.html – Stefan
다음과 같이 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
이 _onStart
에 public 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
}
이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –
@MD 무엇을 의미합니까? 그것은 분명히 답을 제공합니다 ... 아마 다른 게시물을 의미할까요? – theomega
시작 직후 왜'stopSelf();'인가? –
새 스레드에서 서비스를 시작할 수 있다고 생각하지 않지만 서비스에서 새 스레드를 시작하는 것이 좋습니다.
활동과 마찬가지로 서비스에는 주 스레드에서 실행되는 수명주기 메소드가 있기 때문입니다.
서비스가 주 스레드에서 실행되지만 필요에 따라 생성되는 새 스레드에서 무거운 작업을 수행합니다. 나는 그것이 도움이되기를 바랍니다
..
- 1. 서비스를 호출하지 않고 global.asax에서 서비스를 시작하려면 어떻게합니까?
- 2. 다른 패키지에 정의 된 서비스를 시작하려면 어떻게합니까?
- 3. 동일한 네트워크에있는 컴퓨터에 액세스하고 서비스를 시작하려면 어떻게합니까?
- 4. 작업을 강제로 시작하려면 어떻게합니까?
- 5. 활동을 처음부터 강제 시작하려면 어떻게합니까?
- 6. 이 타이머를 onclick으로 시작하려면 어떻게합니까
- 7. 현재 환경에서 tmux를 시작하려면 어떻게합니까?
- 8. Azure 큐를 자동으로 시작하려면 어떻게합니까?
- 9. gui에서 콘솔 프로그램을 시작하려면 어떻게합니까?
- 10. 엔터프라이즈 라이브러리 사용을 시작하려면 어떻게합니까?
- 11. 스레드에서 TcpClient를 중지하려면 어떻게합니까?
- 12. 새 스레드에서 Ninject 사용
- 13. 새 스레드에서 NewGlobalRef 만들기
- 14. 새 스레드에서 클래스 시작
- 15. System.Threading.ThreadAbortException이 새 스레드에서 발생했습니다.
- 16. 새 스레드에서 AnimateWindow 사용
- 17. 새 스레드에서 캐시에 객체로드
- 18. 새 스레드에서 마스터 프로그램 시작 슬레이브 시작
- 19. 스레드에서 Windows 서비스 응용 프로그램을 중지하려면 어떻게합니까?
- 20. winforms에서 응용 프로그램의 애니메이션을 시작하려면 어떻게합니까?
- 21. 타이머를 일시 중지했다가 다시 시작하려면 어떻게합니까?
- 22. 연결된 화면없이 x 서버를 시작하려면 어떻게합니까?
- 23. 파이썬 웹 응용 프로그램에서 세션을 시작하려면 어떻게합니까?
- 24. Java에서 IBM MQ 채널을 시작하려면 어떻게합니까?
- 25. 레이크 작업에서 IRB 콘솔을 시작하려면 어떻게합니까?
- 26. 배치 파일에서 여러 sqlcmd 창을 시작하려면 어떻게합니까?
- 27. 콘솔에서 특정 포트에 GWT devmode를 시작하려면 어떻게합니까?
- 28. 프로그래밍 방식으로 인터넷 연결을 시작하려면 어떻게합니까?
- 29. 디버깅 할 때 인수가있는 프로그램을 시작하려면 어떻게합니까?
- 30. Java 예외 로그 항목에서 디버깅을 시작하려면 어떻게합니까?
야, 나는 ... ... U가 활동을 시작 r에 서비스를 시작하는 방법에 대한 질문 – carora3
그래서, 뭐? startActivity를 startService (i)로 변경하십시오. –
그 dint는 잘 작동합니다. (모든 것이 괜찮은 것처럼 보이면 그냥 도청됩니다. – carora3