簡體   English   中英

如何在新線程中啟動服務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM