Android按下home鍵后重新打開app進入主activity的問題


問題闡述:

  當我們寫一款App的時候,勢必會有這種情況:用戶已經進行了多級的操作,現返回棧中已存在多個activity,那么這個時候我們想回到最初的activity難道要一層層的返回嗎,對用戶來說 無疑是一個不好的操作體驗,這個時候我們就想到了android的四大啟動模式,四大模式的詳情請自行查詢學習,singleTask就是四大啟動模式其中的一個,使用了singleTask模式的activity會在當前的返回棧中有且只有一個實例,當我們需要重新調用這個activity 的時候,並不是new 一個該activity,而是從返回棧中直接調用這個已存在的實例,並將之其上的所有activity清空,保持返回棧中有且僅有其一個activity實例。

  那么,說了這么多,與本文有什么關系呢?

  先來說一下 我的app需求:第一個activity為登錄頁,登錄后保存用戶數據,進入主頁,除了修改密碼和退出登錄外其他操作都應當自動登錄,實現用戶點擊app后 直接進入主頁的效果

  最初,筆者也是覺得singleTask模式非常的方便,並且沒發現什么缺點。but   把apk打包給后端小哥測試的時候,他發現當用戶點擊home鍵返回系統桌面的時候,這個時候重新點擊啟動app會發現,並沒有顯示關閉之前的那個activity,而是進入了登錄頁面。這是,筆者第一個想到的是 會不會本地緩存的用戶數據被清掉了,感覺去檢查了一下,發現用戶數據還在。

  那是什么問題呢,之后又考慮到會不會是home鍵按下后,需要做一個home鍵的監聽攔截,但是這樣有些得不償失,因為攔截下來還是得關掉所有的activity。

  死來想去,想想數據也在,但是沒有自動登錄,會不會是查詢本地用戶緩存數據的方法沒有執行到呢?一番排查,發現只有第一次進入app的時候這個驗證本地數據的方法才被調用了,之后按下home鍵后再打開app並不會執行該方法,那么就能解釋為什么 按下home鍵后在進入程序不會自動登錄到主頁,而是打開登錄頁了。

  可是,為什么沒有執行到呢?

解決方案:

  想了一下,驗證本地數據的方法我是在onCreate()方法中進行調用的,而singleTask啟動模式,調用已存在的activity實例卻是調用的onNewIntent()方法,那么相對應的在onCreate()中調用的驗證本地用戶緩存數據的方法勢必要在onNewIntent()重新調用一下。果不其然,調整之后,問題解決了。(下面附上 自動登錄方法 和onCreate()、onNewIntent()的方法體 )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM