[英]How do I start a service in a new thread?
如何在新線程中啟動我的服務。 我查看了其他問題,但它對我有用。 在正常運行和在單獨的線程中運行時,我需要在服務中進行哪些更改?
將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
}
我不認為您可以在新線程中啟動您的服務,但您可以做的是在您的服務中啟動一個新線程。
這是因為與活動一樣,服務具有在主線程上運行的生命周期方法。
因此,您的服務將在主線程上運行,但它將在需要時創建的新線程上進行繁重的工作。
我希望它有幫助..
引自http://developer.android.com/reference/android/app/Service.html
“請注意,服務與其他應用程序對象一樣,在其托管進程的主線程中運行。這意味着,如果您的服務要進行任何CPU密集型(如MP3播放)或阻塞(如網絡)操作,那么應該生成自己的線程來完成這項工作。有關這方面的更多信息可以在進程和線程中找到.IntentService類可以作為Service的標准實現,它有自己的線程來安排它的工作。“
在我的項目中,我有這樣的人,它的工作:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.