2017-02-04 57 views
0

這是我的主要活動:如何保持的AsyncTask當用戶關閉應用程序

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
    finish(); 
    moveTaskToBack(true); 
    System.exit(0); 
} 

我想AsyncTask繼續數據放在我的服務器在後臺在用戶關閉應用程序後。

+0

您需要熟悉服務 –

+0

Duplicate - http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background和http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background –

+0

讓自己適應服務 –

回答

2

我希望AsyncTask在用戶關閉應用程序後在後臺繼續將數據放入服務器。

AsyncTask目的是執行後臺任務已經超出了一個Activity的生命週期的範圍。當從線程池中分配後臺線程時,一旦任務結束,它就會返回它。即不能使用AsyncTask,因爲所需時間不確定。

什麼是在尋找適合的是Services在Android。

爲什麼即使使用AsyncTask如果我們有服務?

嘛,說比如你需要從一個ActivityButton的點擊下載圖像/歌曲或您需要執行,將需要一些時間來完成其執行的任務。從主線程(也稱爲UI線程)執行這些任務是一種糟糕的方法,並且會使您的應用程序變得遲鈍並最終導致ANR。所以這些任務是從一個單獨的線程異步處理,以保持應用程序黃油順利。

+0

到目前爲止,我從來沒有聽說過服務。肯定會檢查出來。 – grant

+0

這是成爲社區一員的最好的部分。你學習新的東西並分享新的東西:) – OBX

+0

爲什麼即使使用AsyncTask如果我們有服務? – grant

0

你必須檢查服務和/或IntentServices

1

服務是解決方案的一部分,但要注意服務前臺線程上運行。你會想從服務中運行你的AsyncTask,以確保它繼續在後臺線程上運行。

就個人而言,我會使用服務建議有利於JobScheduler,或者如果你需要支持低於API 21設備,Evernote的的JobManager(這也有點更容易使用)。這些將幫助您在適當的時間安排後臺操作,以最大限度地減少電池使用或設備空閒時的時間。使用設備資源時成爲一個好公民很重要。

+0

'System.exit(0);'完成一項服務嗎? – grant

+0

@grant System.exit(0)將停止服務。它基本上會崩潰應用程序進程。但是,服務可能會重新啓動,具體取決於您創建的服務類型。如果該服務是所謂的粘滯服務(https://developer.android.com/reference/android/app/Service.html#START_STICKY),那麼操作系統將重新啓動您的服務,這當然會重新啓動該過程。 – dhaag23

相關問題