如何在新線程中啓動我的服務。我看了其他問題,但它爲我工作。在正常運行時以及在單獨的線程中運行時,需要對服務進行哪些更改?如何在新線程中啓動服務?
回答
在我的項目,我有一個像這一點,它的工作:
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類可以作爲Service的標準實現來使用自己的線程安排它的工作要完成。「
我已經讀過:)它只是我無法弄清楚如何讓我的服務在新線程中運行。我在這個論壇上嘗試了其他問題的代碼,但是dint爲我工作。 – carora3 2012-01-13 15:13:38
您是否像這樣使用IntentService? http://developer.android.com/reference/android/app/IntentService.html – Stefan 2012-01-13 15:57:31
或者你可以像這樣創建一個WorkerThread: private final class WorkerThread extends Thread { \t public Handler handler; \t @覆蓋 \t public void run(){ \t Looper.prepare(); \t這個。處理機=新的處理程序(){ \t @覆蓋 \t公共無效的handleMessage(最終消息MSG){ \t開關(msg.what){ \t \t情況MSG_DO_MY_JOB: \t \t \t // ... \t \t破; \t \t case MSG_STOP: YourOuterClass.this.stopSelf(); \t \t break; \t} } }; Looper.loop(); } } 創建服務時啓動worker並在完成某些操作時將消息發送給處理程序。 – Stefan 2012-01-13 16:05:56
重命名public void onStart(final Intent intent, final int startId)
方法_onStart
並使用這個新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
}
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2015-04-02 05:21:44
@MD你是什麼意思?它顯然提供了一個答案......也許你的意思是另一個職位? – theomega 2015-04-03 21:46:39
爲什麼'stopSelf();'剛開始後? – 2016-03-18 08:59:23
我不認爲您可以在新線程中啓動您的服務,但您可以做的是在您的服務中啓動一個新線程。
這是因爲像活動一樣,服務具有在主線程上運行的生命週期方法。
因此,您的服務將在主線程上運行,但它會在需要時創建的新線程上執行繁重的工作。
我希望它有助於..
- 1. 如何在服務中啓動新的線程?
- 2. 如何在Android的新線程啓動服務
- 3. 線程服務。如何在延遲後重新啓動一些線程?
- 4. 如何在新應用程序啓動時啓動服務?
- 5. 如何在delphi 7,Windows XP中啓動線程到服務中?
- 6. 是否可以在新線程中啓動服務?
- 7. Android服務的新線程錯誤:線程已啓動
- 8. startForeground如何影響在android服務中啓動的線程?
- 9. 在線程上啓動多個服務
- 10. 在weblogic中使用Spring啓動服務器啓動線程
- 11. 線程在服務中啓動線程創建
- 12. 如何在重新啓動後通過服務啓動活動
- 13. 如何在服務器啓動後執行後臺線程?
- 14. 當Android重新啓動服務時,在Android服務中啓動的線程會發生什麼?
- 15. Windows服務無法啓動Win 2003服務器中的線程
- 16. 如何重新啓動服務器後重新啓動RoR服務
- 17. 在新線程中啓動課程
- 18. Android服務不會從線程啓動
- 19. 如何從服務啓動的處理程序跳轉到服務的線程?
- 20. 從其活動啓動的服務是否在新線程中運行?
- 21. 「新線程」不啓動新線程?
- 22. 如何重新啓動窗口服務
- 23. 如何重新啓動mysql服務器?
- 24. 如何重新啓動windows服務c#
- 25. 如何重新啓動Windows服務?
- 26. 如何重新啓動node.js服務器
- 27. 如何重新啓動flask服務器?
- 28. 如何重新啓動REST服務?
- 29. 如何重新啓動RabbitMQ服務
- 30. 重新啓動服務器後重新啓動WCF服務
夥計,我問了一下啓動的服務..ü[R開始的活動.. – carora3 2012-01-13 15:07:17
那麼,是什麼?將startActivity更改爲startService(i); – 2012-01-13 15:25:54
對不起,這力度工作以及:(它只是當每一個似乎沒問題的時候.. – carora3 2012-01-13 15:31:39