2010-01-27 29 views
1

我遇到了各種嚴重衝突。我的應用程序是一個遠程服務,它在屏幕進入睡眠狀態時基本上開始一項活動。它如何做到這一點非常簡單,通過屏幕關閉廣播接收器,然後顯式地將活動作爲新任務開始。該活動基本上負責響應關鍵事件並顯示一些簡單的文本。當某些應用程序正在運行時,StartActivity意圖失敗

由於在2.0中添加了一些窗口標誌,活動可以做到這一點。它們可以通過將它們放在鎖屏之上或完全關閉鎖屏來創建。這樣,他們基本上擁有了焦點,而不需要用戶解鎖鎖屏。 2.0中的鬧鐘使用標誌來喚醒設備並顯示報警對話框。我使用它們在屏幕睡眠時放置我的活動,以便用戶看到自定義喚醒鎖屏。我們在屏幕上創建它的原因是爲了擺脫用戶在第一次看到鎖屏時喚醒時的用戶體驗滯後,然後看到活動出現。此外,在睡眠時立即執行該操作,可以有效地處理關鍵事件。

該過程除了在某些應用程序中完美工作。到目前爲止,瀏覽器(甚至海豚瀏覽器)以及Facebook應用程序正在運行時,錯誤似乎是一致的。 GTalk或Launcher中從未發生該錯誤。這種情況很少發生,但仍然可以在頻繁的應用程序中重複使用。我無法弄清楚爲什麼我的活動不會在這些應用程序處於活動狀態時在睡眠中創建。我的遠程服務仍然關閉廣播屏幕併爲顯式意圖執行startActivity,這就是我在日誌中獲得的所有內容。我的onCreate沒有被調用。相反,當我們再次喚醒屏幕時,它會被調用。

作爲控件,我嘗試過在創建遠程服務時啓動部分喚醒鎖,並且問題依然存在。所以我不相信這是CPU已經進入睡眠狀態的問題。由於只有這些特定的應用程序導致問題重複,我無法想象爲什麼該活動開始失敗。這些應用可能會干擾另一個應用的創建能力?我使用singleInstance作爲啓動模式,以便我可以確保該活動永遠不會被用戶進程調用。我希望它在用戶解鎖時消失,並且它能夠像這樣正常工作,只要它能夠被創建。 singleInstance確保我可以擁有相同的鎖定屏幕句柄,以便根據遠程服務監視的用戶操作執行特定的操作。

我的源代碼可以在我的項目頁面上查看。 http://code.google.com/p/mylockforandroid/source/browse/#svn/trunk/myLock/src/i4nc4mp/myLock

問題發生在我的CustomLockService和NoLockService變體上。這兩項服務將啓動Lockscreen或ShowWhenLockedActivity,並發現錯誤。說明錯誤最終結果的構建 - 由於錯誤,用戶必須嘗試解鎖3次,因爲在喚醒時,當oncreate最終成功時,用戶在正常情況下會看到活動,因爲關鍵事件邏輯也會自動解除由於延遲onCreate,似乎不會發生,所以他們必須再次發送它睡覺。現在,活動已經正常開始,並且屏幕處於睡眠狀態,預期的功能會在下次喚醒時發生 - 也可以從下載選項卡下載。

這似乎是一個非常不合理的事情,只能由特定的應用程序引起。除非我在我的活動定義中犯了一些嚴重錯誤,否則我很困惑並且沒有解決方案的想法。

+0

我通過手動有任務等待嘗試開始修復問題活動。不管衝突是什麼,這都是時間的結果。可能是一些根深蒂固的OS過程問題。延遲是一個完美的契合,因爲我確實希望我的鎖定覆蓋尊重5秒寬限期,當超時睡眠在鍵被守衛之前開始。我沒有根本原因的答案。希望我做到了。 – mylock 2010-01-27 09:41:02

+0

另外,在屏幕上獲取屏幕上的部分喚醒鎖定,直到我的活動onStart在屏幕上被調用時已解決該問題。我相信它被其他進程推遲了,因此不能在cpu睡眠之前完成,所以任務的線程正在解決它,但wakelock讓我使代碼更有效 – mylock 2010-02-03 06:03:20

回答

1

答案其實是一個已經在審查一段時間的android中的錯誤。它與家庭鑰匙有關。出於某種原因,啓動活動調用是因爲新的任務在主鍵最近啓動後停止。在測試中我從未注意到這個連接。該錯誤不統一和一致性的因素是,是否home鍵也有問題

這裏喚醒過程中使用的是錯誤報告:http://code.google.com/p/android/issues/detail?id=4536

相關問題