2010-03-17 70 views
0

這是我的用例:
該應用程序從登錄屏幕開始。您輸入您的憑據並點擊「登錄」按鈕。然後出現一個進度對話框,你等待一些東西下載。一旦這些東西下載完畢,你就會被帶到一個新的活動中。具體到哪個活動取決於服務器響應。我可以在沒有任務進入前臺的情況下爲特定任務創建活動嗎?

這裏是我的問題:
如果在此登錄/下載過程回家,在不久的將來,您的下載將完成一些點,並且將調用startActivity()那麼新的活動將被推到前臺,粗暴地中斷用戶。在我開始下載之前,我無法啓動活動,因爲正如我前面提到的那樣,我開始的活動取決於下載的結果。

我顯然不喜歡像這樣打斷用戶。解決這個問題的一個方法是避免調用startActivity(),直到用戶返回到應用程序。我可以通過跟蹤LoginActivity的onStop()onRestart()來做到這一點。 但我想知道,有沒有什麼辦法可以在後臺創建活動?這樣用戶返回到應用程序,他準備去...否則他將不得不等待新的活動創建(這可能需要一些時間,因爲新的活動必須下載和顯示一些數據)。

更新: 猜猜是什麼?我撒了謊!我可以發誓說,開始這項活動正在使它前來,但我又回過頭來再次測試,問題已經神奇地消失了。我在1.6和2.0.1都測試過,兩個操作系統都足夠聰明,不會把後臺任務帶到前臺。

回答

2

我懷疑你在Service下載。如果是這樣,Service應該創建一個Notification完成後,用戶可以激活自己。 PendingIntent將持有確切的Activity開始。

當然,當Activity仍然有效,沒有Notification應張貼,所以你應該提到你Service當你Activity處於活動狀態(在onResume()),當沒有(在onPause()),如果是活動的,服務可以讓你的活動開始正確的活動。

+0

我不使用服務,它只是一個簡單的'AsyncTask'。讓用戶從通知開始活動與開始活動後返回到應用程序的活動相同。所以它不能很好地解決我的問題,但通知可能是一個很好的獎勵,所以感謝這個想法。 – 2010-03-17 19:07:57

+0

那麼,如果你希望用戶能夠關閉該活動,同時仍然在下載,我想你應該使用一個'服務'的下載! – MrSnowflake 2010-03-19 10:24:42

0

我會看看保持下載的數據與活動分開,而不是在Service。這樣,所有的數據都可以在後臺下載,無論Activity應該(或正在顯示)。

然後,當用戶返回應用程序時,應用程序可以根據是否已下載正確的數據,選擇(在onResume)顯示哪個Activity

如果完成數據下載對於Notification來說不夠重要,那麼這將是優選的。

+0

謝謝,但這與手頭的問題確實沒有任何關係。此下載在單獨的線程中發生,因此它不會減慢用戶界面,並且後臺活動不會影響下載。對於這個用例來說服務是不合適的;這不是一個很長的下載,只是用戶可能會去其他地方。 – 2010-03-17 19:12:20

+0

我意識到這並沒有直接回答你的問題,但我認爲它提供了一個有效的選擇。我認爲你可以這樣想:如果你想讓事情發生在後臺,可以通過「服務」來完成。 「活動」應該僅僅依靠在前景中做些事情。我不相信你可以在後臺開始一個「活動」。在這種情況下,當用戶返回到應用程序時,您必須啓動新的「活動」。 – bdls 2010-03-18 00:05:49

相關問題