有關服務的Android文檔說:「另一個應用程序組件可以啓動服務,即使用戶切換到另一個應用程序,它也將繼續在後臺運行。」從onStopCommand返回結束Android服務嗎?
讓我們假設Android的服務產生一個線程或在的AsyncTask onStartCommand:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//asyncrhonous call-1
new SomeAsyncTask().execute();
//asynchronous call-2
new Thread(new Runnable(){//some runnable}).start();
//shouldn't service terminate here?
return Service.START_NOT_STICKY;
}
在上面的代碼中,onStartCommand
return語句立即因爲兩個語句之前,它是異步的遭遇。在這裏產生的線程結束執行之前,服務是否應該終止?如果他們不是守護進程呢?
此外,由於在UI線程上執行的服務(對IntentService稍有困惑),我們需要在單獨的線程中執行網絡操作。因此,人們可能經常需要創建asynctasks或不同的線程。任何人都可以幫助我理解服務的執行情況,以及服務是否「繼續在後臺運行」?然後,從onStartCommand返回後,它「運行」了什麼?
「服務停止或者通過自己調用stopSelf()或其他人調用stopService()。」以這種方式停止它會終止正在運行的非守護進程線程嗎? – rahulserver
@rahulserver:這取決於誰是「它」。由Android框架代碼創建的線程是Android框架代碼的責任,所以當IntentService停止時,由IntentService創建的後臺線程將被停止。由* you *創建的線程是您的*責任 - Android的框架代碼不知道任何關於它們的內容。 – CommonsWare
「由IntentService創建的後臺線程」這是否意味着我們已經「明確」編寫在IntentService生命週期方法中的一個線程或由android os(工作線程)隱式創建的線程? – rahulserver