2011-08-16 50 views
3

我一直在尋找這個答案,同時我可以找到其他人在日誌貓中看到相同的條目,但沒有一個腳印看起來像是類似於我的。Android動畫在啓動時引起「歷史記錄的活動空閒超時」

基本上我開始一個無限重複的動畫作爲我的活動啓動的一部分。屏幕呈現正常,對所有觸摸輸入都有反應,但我在logcat中獲得以下條目:

08-17 16:03:25.910:WARN/ActivityManager(110):啓動超時已過,放棄喚醒鎖! 08-17 16:03:25.972:WARN/ActivityManager(110):爲HistoryRecord {4057ad58 com.companyname.dm/.ui.activities.home.HomeActivity}

活動空閒超時我已閱讀職位,說明這些條目確實只是警告,表明主線程活套從未變得閒置,如果它是預期的操作模式則不是問題。但是,除了這個事實,即小型重複動畫(每3秒重複一次的縮放/變換/ alpha動畫)填充消息隊列似乎過多,我的主要問題是它妨礙了創建自動化測試的能力。我們正在嘗試使用robotium執行測試,但由於空閒超時,測試永遠不會啓動。

不開始動畫可以消除這個問題,但是比根本原因解決方案更適用於解決方法。我試圖瞭解,如果我要麼沒有正確實施我的動畫,如果這確實只是預期的行爲,或者如果有辦法確保儀器/機器人的連接將建立。

任何有識之士將不勝感激!謝謝。

+2

我還在[robotium group]上找到了一個線程(http://groups.google.com/group/robotium-developers/browse_thread/thread/100e0fa5412d04f8/58ed13c2033bb4d1?lnk=gst&q=+animations+#58ed13c2033bb4d1)指的是同樣的問題,但沒有解決方案。我們目前將動畫的無限重複更改爲僅設置了一次動畫,但正如我在原始文章中提到的,這更像是一種工作。 –

+0

我想我的問題真的歸結爲,是否有一個乾淨的方式來實現動畫,所以他們不會不斷填充主UI線程消息循環?如降低幀率或將任何東西移動到輔助線程?如果主用戶界面在短時間內似乎閒置,那麼waitForIdleSync()將不成問題。 –

+0

你什麼時候開始這些動畫? – Ronnie

回答

0

嘗試在新線程中開始動畫,如果在onCreate方法中做了太多的事情,將會阻塞Android中的UI線程,並且如果花費更長時間,可能會導致ANR(應用程序無響應)返回前5秒以上。通過在新線程中啓動動畫,onCreate將返回並且系統會很快樂。

new Thread(new Runnable() { 
    public void run() { 
    //start animation. 
    } 
}.start(); 
+0

這沒有幫助...我沒有在onCreate中做太多的問題,我沒有接近生成ANR。我的應用程序啓動迅速,響應迅速。問題在於動畫是(正如我所期望的)不斷地重新繪製屏幕,​​正是這些繪製消息使主UI線程始終處於不被視爲空閒的狀態。 –

0

被重繪屏幕的代碼需要在不同的線程被啓動,否則主UI線程永遠不會成爲閒置,這是造成問題。

從另一個線程與UI進行交互時,您可能會遇到問題,因此您應該查看AsyncTask,這實際上是用於計算/繪製進度條的東西。由於這些警告是在X秒後的任何時間產生的,而這隻受到Android的檢查限制,所以警告的數量極低。

+0

這與dac2009的早期答案有什麼不同?我相信,即使動畫是在不同的線程(我已經完成)中啓動的,實際的屏幕重繪消息也會在主UI線程中處理。將動畫移動到後臺線程並不能解決問題。 –