2012-12-01 24 views
1

一小部分。文件列表可能相當長 - 顯然足以導致ANR與少數用戶一起使用。一千個文件絕不是不可能的。文件API導致ANR的我的應用程序檢查

的代碼非常簡單:

new File(fileUrl).exists() 

我目前做的主線程上,因爲我需要的操作被阻止。我可以用它的AsyncTask類,然後繼續完成其他工作一旦完成,但我想如果這是一個有效的原因嗎?

所有的工作都在後臺Service正在做的,如果改變任何東西。我也有可能會體驗方向更改,這可能會與AsyncTask惱人。 Handler會更好嗎?

因此,總結的東西了:我應該做一個後臺服務,可能發生方向改變使用的AsyncTask了潛在的長時間運行的操作?

回答

2

首先,Service不受方向更改的影響 - 僅當前正在運行的Activity類被銷燬/重新創建。

其次,AsyncTaskService中沒有多大優勢,因爲它旨在能夠與UI進行交互。它會給在單獨的線程上工作的優勢,但其餘的方法基本上是多餘的。

我推薦使用它管理自己的工作線程來完成工作的IntentService。見IntentService documentation

+0

謝謝,清理了很多的東西。我有點困惑,AsyncTasks在循環更改服務中運行時會被取消,但這很好。我會看看IntentService類。 Upvote現在! –

+1

IntentServices真棒!我很傷心直到現在我還不知道他們:( –

+0

@MichellBak:**「IntentServices太棒了!」是的,我最喜歡的Android類之一。我感覺到你的痛苦 - 我花了我幾個月之前,我發現'IntentService'只是偶然在SO上閱讀帖子時,我當前的應用程序使用'AlarmManager'觸發的'IntentService'來在夜間下載數據 - 當用戶睡着時 - 強大的東西。 :d – Squonk