首先,我將解釋我處於我的應用程序中的情況,然後討論我的主要問題。首先,我想知道我處理活動的方式是否是處理活動的正確方式,因爲我認爲這可能不會導致我的問題。Android:處理活動的正確方法
目前我有3個活動設置。 Main.class,Login.class和Display.class。主要活動根本沒有任何關聯的UI,它啓動其他活動。因此,啓動應用程序時啓動的第一個活動是Main活動,它會從SharedPreferences存儲中讀取並讀取用戶是否登錄。如果它們未登錄,它將打開Login。類,如果他們已經登錄,它會打開Display.class(兩者都有與之關聯的UI)。它使用startActivityForResult()。
由於我決定去處理活動,我需要重寫Login.class和Display.class上的後退按鈕:否則,它將返回到Main.class,並重新運行啓動活動序列,它將重新啓動剛剛運行的活動(因此後退按鈕無用)。所以,我覆蓋了後退按鈕發回一個-1的整數,然後完成()當前活動。我重寫了Main.class的onActivityResult(int,int,Intent),如果它接收到-1,它也會完成(),而不是試圖重新啓動活動。
現在,這一切都爲我的需要而工作,儘管我有一種感覺,這是完全錯誤的方式來處理活動,並且這會給我以後的問題帶來麻煩。
在我的應用程序中,我決定將一個應用程序窗口小部件和一個通知放入,這兩個窗口都會在點擊時打開應用程序(通過啓動Main.class的意圖)。我已經完成了所有工作,以便它能這樣做,儘管看起來開始一個新的活動會導致問題。
會發生什麼基本上是,如果應用程序已經在運行,並且有人拉下通知並點擊它,它會打開同一應用程序的新活動。這是有問題的,尤其是我處理後退按鈕的方式:當您打開一個新按鈕並按下後退按鈕時,它將關閉新按鈕(如預期的那樣),但會將您帶回舊的按鈕。然後您可以再次按下後退按鈕並退出,但顯然我不想發佈需要按下後退按鈕兩次的應用程序。解決這個問題的最好方法是什麼?如果這是問題的主要部分,我很樂意完全改變我處理活動的方式。
謝謝, 喬希。
+1有關重新思考方法的良好討論。我試圖通過在活動之上有一個Application類來解決這個問題。我在下面發佈了一個例子。 – Aleadam 2011-04-20 05:00:20