由於接觸android時間也不是很久,而且主要都是在做相當於后端的工作,對於前端ui的編碼經驗不足,導致有時候碰見一些問題一時半會找不到解決思路,很尷尬
最近剛好接手一個做ui的同事剛做一半的工作來協助做,其他功能邏輯等的開發都是挺順利的,唯獨碰見一個ui交互上的問題,硬是卡了我半天時間,一直苦苦無法解決,且始終想不通
問題:
A應用的OneActivity跳轉到B應用的TwoActivity時候,如果在OneActivity的Button處雙擊或者多次點擊打算進入TwoActivity,則會很大概率出現界面先進入了TwoActivity,然后立馬又閃現到了OneActivity,分析log都沒有異常崩潰等跡象。朋友們跟我說要在點擊Button的時候添加防抖,我也是這么認為的添加防抖應該就好了,但是我為了當用戶點擊Button后能夠快速的進入TwoActivity,我使用的是先執行startActivity后再擋掉后邊的點擊動作,結果一直苦苦不能解決,問題一直復現到,通過log查看分析,OneActivity始終先onPause然后又onResume了,我這個人就是那種不信邪的人,我想着應該是在OneActivity啟動TwoActivity之后,由於界面仍然還在OneActivity,所以OneActivity繼續接收到了點擊事件,可能系統就會出現這個問題,我一直認為的是系統應該有問題,因為我們做的項目都是在客制化的系統上開發的,然后我就在OneActivity中點擊Button后使用各種點擊事件消耗機制,防止分發機制,結果都無法解決,感覺自己就是掉到坑里邊了,出不來!!!
終於后來突然靈光一閃,卧艹!我怎么不知道先delay防抖再執行啊。。。,當我想到這個思路后,我就已經100%肯定這個問題一定能解決了!果不其然,測試一下后完全沒有問題了,唉!!!!哭笑不得。。。
現在分享出來希望能幫助和我一樣遇見這樣的問題苦苦執着也想不通,浪費時間精力的同行們,讓我們一起共勉,奮斗。。。
最后總結:
Android的跨進程啟動另外一個應用界面時出現這樣的問題可能應該是正常的(雖然我也沒有系統的學習過安卓,尤其是UI的部分),這應該是Android的一個機制,它應該是判斷了用戶快速點擊的時候,當用戶最后的點擊事件被哪個Avtivity所響應了,那么就會
自動切換回哪個Activity,所以最好的解決辦法就是使用先delay一定的時間,再執行啟動TwoActivity的操作,這樣可以始終保持我們自己的啟動TwoActivity動作是在用戶的點擊動作之后才操作的就可以了
private Runnable startTwoActivityRun = new Runnable() { @Override public void run() { //啟動TwoActivity的邏輯 } }; /** * toTwoActivity */ public void toTwoActivity() { Log.i(TAG,"toTwoActivity()"); mHandler.removeCallbacks(startTwoActivityRun); mHandler.postDelayed(startTwoActivityRun,500); }