2012-11-08 78 views
0

我正在爲平板電腦編寫Android應用程序(ICS)。只需輕觸一個按鈕,用戶就可以從活動A移動到活動B。我想在10秒後從活動C返回到活動A.有沒有一些方法可以數到10而不鎖定Activity C?Android應用程序活動的空閒超時

我成功地使用了asyncTask,但是如果我在onPostExecute()中使用startActivity(A),那感覺就像我違反了asyncTask不應該混淆UI的指導方針。我嘗試過get(),但它確實鎖定了Activity C,而它正在等待10秒才能通過。

在此先感謝!

+2

爲什麼使用AsyncTask代替Timer? – RvdK

+1

爲什麼使用'Timer'? Android的事件系統(見Handler)允許使用更輕量級的解決方案。 –

回答

0

使用AsyncTask可以正常工作。來自Android文檔:

onPostExecute(結果),在後臺計算完成後在UI線程上調用。

由於它在UI線程上調用,你應該沒問題。

Documentation

0

您可以使用警報管理器爲。將其設置爲從活動a開始發送廣播10秒,並且執行活動a b和c的基本活動以接收廣播,在接收廣播之後結束當前活動並用新標誌開始活動a。如果當前實例是活動a,則忽略,如果不啓動活動a。類似的東西。

至於你可以更新的每一個動作報警經理,在進入活動等

這種實現的優點閒置的部分是,你沒有經歷具有麻煩擔心上下文泄漏,堅持跨活動等定時器。並可以利用已有的東西。您也可以考慮使用服務。

如果沒有,你可以使用共享偏好存儲的時間超時,並檢查或更新它的動作..一個更簡單的實現。

祝你好運。

1

假設您的活動中有任何View實例,則可以使用View.postDelayed()以給定的延遲發佈可運行的實例。在此可運行中,您可以撥打Activity.finish()。您還應該使用View.removeCallbacks()刪除onDestroy()中的回叫,以避免在用戶已從您的活動導航回來後調用回調。

使用AsyncTask來計算一些時間只是一個矯枉過正的情況(除非你想用AsyncTask來實際做一些有用的後臺工作)。 LooperHandler類提供了在給定延遲後在UI線程上執行任何代碼所需的所有內容。上面提到的View方法只是暴露Handler功能的便利方法。