Android Studio finish()方法的使用與解決app點選“返回”(直接退出)
在這裡,我們將用到finish(),簡單介紹一下它的使用:
finish()官方解析:Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().“當你開啟的Activity已經執行完成並且需要被關閉的時候可以呼叫這個方法,當你按返回的時候,它將返回到當前Activity的發起者。”
(不過這一段我不是很理解,我還是相信自己的實踐吧。)
一、問題的提出
2019年十二月,我遇到了一個問題。在我做一個android app的時候,我有A B C 三個介面,其中A為主介面,預設兩種情況:
①從A跳轉(intent)到B 然後從 B跳轉到A。
點選返回鍵的結果是:A→B,也就是說點選“返回”又從主介面跳轉到B了,顯然這樣的使用者體驗非常糟糕。
②從A跳轉(intent)到B 然後從B跳轉到C。
點選返回的結果是:C→B→A,然而我要當需求是“點選返回,直接從C跳轉到A”。結果顯然,這不符合產品需求。
為此,我用了finish()函式來解決這個問題。
效果舉例:
在C中新增finish()之後,點選“返回”,會直接回到主介面。
這樣講可能很難理解,舉個例子吧:
在主介面A 點選“竹海明珠”進入 介面B
點選左上角的自定義的back按鈕,會回到主介面。
但是在主介面再次點選 竹海明珠,又再次點選手機系統自帶的返回按鈕後,介面再次回到主介面。
二、activity多次回跳問題的解決
為了解決這個問題,可以在你跳轉介面的Intent中下面加一個finish函式。
如:
(1)先講一下**“問題二**”我是在主介面中加了跳轉到“竹海明珠”的intent:
zhuH.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent_zh = new Intent(MainActivity.this,zhuhai.class); startActivity(intent_zh); finish(); } }); 這時候,在“竹海明珠“介面中點選“返回(系統自帶)”按鈕的時候,APP不會再返回到主介面,而是會直接退出。
(2)顯然這不能解決activity多次回跳的問題。
那麼利用finish()的原理——“它將返回到當前Activity的發起者”,我們應當將finish()加在跳轉到左上角自定義的back按鈕的程式碼中:
zhuhaimingzhu.java中:
//控制返回按鈕 back = findViewById(R.id.back); back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(zhuhai.this,MainActivity.class); startActivity(intent); finish();
這樣,它就會直接回到主介面了。
於此同時問題二也解決了,直接將問題二中的finish()給註釋掉就好了,其它activity也是同樣的操作。
問題產生的思路:
為什麼我會在“竹海明珠”以及同級別下的activity中加finish()呢?
這是因為我有一個Activity多次回跳的問題沒有解決,同時還有一個問題是,在我於主介面中點選返回按鈕後,會直接退出app,這樣的使用者體驗非常不好,為了保持體驗的一致性,我索性將二級activity(竹海明珠、洪崖丹井等等)全部設定finish(),這樣的話,只要在二級及以上頁面中,只要點選了返回按鈕就會直接退出APP,但使用者可以在我自定義的左上角的back按鈕返回activity介面。但,這舒適無奈之舉,這樣的使用者體驗效果確實不好。。。
三、點選返回按鈕不退出app
那麼如何解決,點選返回按鈕不直接退出app呢?
設計思路
1.點選兩次返回按鈕才退出app
2.點選返回按鈕回到桌面但是不退出app,使app在後臺執行
第一種:點選兩次按鈕退出app
設計:
①重寫onBackPressed方法
onBackPressed() 捕獲後退鍵按鈕back的資訊
②currentTimeMills 返回毫秒級別的系統時間
③放在oncreate方法下
private static final int TIME_EXIT=2000; private long mBackPressed; @Override public void onBackPressed(){ //onBackPressed() 捕獲後退鍵按鈕back的資訊 if(mBackPressed+TIME_EXIT>System.currentTimeMillis()){ //currentTimeMillis,返回毫秒級別的系統時間 super.onBackPressed(); return; }else{ Toast.makeText(this,"再點選一次返回退出程式",Toast.LENGTH_SHORT ).show(); mBackPressed=System.currentTimeMillis(); } }
第二種:單擊回到桌面,APP在後臺執行
單擊回到桌面,app仍在後臺執行 @Override public boolean onKeyDown(int keyCode,KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent home = new Intent(Intent.ACTION_MAIN); home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); home.addCategory(Intent.CATEGORY_HOME); startActivity(home); return true; } return super.onKeyDown(keyCode,event); }
總結
到此這篇關於Android Studio finish()方法的使用與解決app點選“返回”(直接退出)的文章就介紹到這了,更多相關Android Studio finish()方法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!