Android Studio finish()方法的使用與解決app點(diǎn)擊“返回”(直接退出)
在這里,我們將用到finish(),簡(jiǎn)單介紹一下它的使用:
finish()官方解析:Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().“當(dāng)你打開的Activity已經(jīng)執(zhí)行完成并且需要被關(guān)閉的時(shí)候可以調(diào)用這個(gè)方法,當(dāng)你按返回的時(shí)候,它將返回到當(dāng)前Activity的發(fā)起者?!?br /> (不過這一段我不是很理解,我還是相信自己的實(shí)踐吧。)
一、問題的提出
2019年十二月,我遇到了一個(gè)問題。在我做一個(gè)android app的時(shí)候,我有A B C 三個(gè)界面,其中A為主界面,預(yù)設(shè)兩種情況:
①從A跳轉(zhuǎn)(intent)到B 然后從 B跳轉(zhuǎn)到A。
點(diǎn)擊返回鍵的結(jié)果是:A→B,也就是說點(diǎn)擊“返回”又從主界面跳轉(zhuǎn)到B了,顯然這樣的用戶體驗(yàn)非常糟糕。
②從A跳轉(zhuǎn)(intent)到B 然后從B跳轉(zhuǎn)到C。
點(diǎn)擊返回的結(jié)果是:C→B→A,然而我要當(dāng)需求是“點(diǎn)擊返回,直接從C跳轉(zhuǎn)到A”。結(jié)果顯然,這不符合產(chǎn)品需求。
為此,我用了finish()函數(shù)來解決這個(gè)問題。
效果舉例:
在C中添加finish()之后,點(diǎn)擊“返回”,會(huì)直接回到主界面。
這樣講可能很難理解,舉個(gè)例子吧:
在主界面A 點(diǎn)擊“竹海明珠”進(jìn)入 界面B
點(diǎn)擊左上角的自定義的back按鈕,會(huì)回到主界面。
但是在主界面再次點(diǎn)擊 竹海明珠,又再次點(diǎn)擊手機(jī)系統(tǒng)自帶的返回按鈕后,界面再次回到主界面。
這時(shí)候在主界面上,你點(diǎn)擊返回按鈕,不是退出APP回到桌面了,而是回到了竹海明珠界面。
二、activity多次回跳問題的解決
為了解決這個(gè)問題,可以在你跳轉(zhuǎn)界面的Intent中下面加一個(gè)finish函數(shù)。
如:
(1)先講一下**“問題二**”我是在主界面中加了跳轉(zhuǎn)到“竹海明珠”的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(); } }); 這時(shí)候,在“竹海明珠“界面中點(diǎn)擊“返回(系統(tǒng)自帶)”按鈕的時(shí)候,APP不會(huì)再返回到主界面,而是會(huì)直接退出。
(2)顯然這不能解決activity多次回跳的問題。
那么利用finish()的原理——“它將返回到當(dāng)前Activity的發(fā)起者”,我們應(yīng)當(dāng)將finish()加在跳轉(zhuǎn)到左上角自定義的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();
這樣,它就會(huì)直接回到主界面了。
于此同時(shí)問題二也解決了,直接將問題二中的finish()給注釋掉就好了,其它activity也是同樣的操作。
問題產(chǎn)生的思路:
為什么我會(huì)在“竹海明珠”以及同級(jí)別下的activity中加finish()呢?
這是因?yàn)槲矣幸粋€(gè)Activity多次回跳的問題沒有解決,同時(shí)還有一個(gè)問題是,在我于主界面中點(diǎn)擊返回按鈕后,會(huì)直接退出app,這樣的用戶體驗(yàn)非常不好,為了保持體驗(yàn)的一致性,我索性將二級(jí)activity(竹海明珠、洪崖丹井等等)全部設(shè)置finish(),這樣的話,只要在二級(jí)及以上頁面中,只要點(diǎn)擊了返回按鈕就會(huì)直接退出APP,但用戶可以在我自定義的左上角的back按鈕返回activity界面。但,這舒適無奈之舉,這樣的用戶體驗(yàn)效果確實(shí)不好。。。
三、點(diǎn)擊返回按鈕不退出app
那么如何解決,點(diǎn)擊返回按鈕不直接退出app呢?
設(shè)計(jì)思路
1.點(diǎn)擊兩次返回按鈕才退出app
2.點(diǎn)擊返回按鈕回到桌面但是不退出app,使app在后臺(tái)運(yùn)行
第一種:點(diǎn)擊兩次按鈕退出app
設(shè)計(jì):
①重寫onBackPressed方法
onBackPressed() 捕獲后退鍵按鈕back的信息
②currentTimeMills 返回毫秒級(jí)別的系統(tǒng)時(shí)間
③放在oncreate方法下
private static final int TIME_EXIT=2000; private long mBackPressed; @Override public void onBackPressed(){ //onBackPressed() 捕獲后退鍵按鈕back的信息 if(mBackPressed+TIME_EXIT>System.currentTimeMillis()){ //currentTimeMillis,返回毫秒級(jí)別的系統(tǒng)時(shí)間 super.onBackPressed(); return; }else{ Toast.makeText(this,"再點(diǎn)擊一次返回退出程序", Toast.LENGTH_SHORT ).show(); mBackPressed=System.currentTimeMillis(); } }
第二種:?jiǎn)螕艋氐阶烂?,APP在后臺(tái)運(yùn)行
單擊回到桌面,app仍在后臺(tái)運(yùn)行 @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); }
總結(jié)
到此這篇關(guān)于Android Studio finish()方法的使用與解決app點(diǎn)擊“返回”(直接退出)的文章就介紹到這了,更多相關(guān)Android Studio finish()方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android點(diǎn)擊事件之多點(diǎn)觸摸與手勢(shì)識(shí)別的實(shí)現(xiàn)
- Android開發(fā)返回鍵明暗點(diǎn)擊效果的實(shí)例代碼
- Android實(shí)現(xiàn)自動(dòng)點(diǎn)擊無障礙服務(wù)功能的實(shí)例代碼
- Android自定義SeekBar實(shí)現(xiàn)滑動(dòng)驗(yàn)證且不可點(diǎn)擊
- android實(shí)現(xiàn)點(diǎn)擊按鈕控制圖片切換
- Android實(shí)現(xiàn)點(diǎn)擊某個(gè)按鈕指定位置彈出布局
- Android實(shí)現(xiàn)圖片點(diǎn)擊放大
- android實(shí)現(xiàn)點(diǎn)擊圖片全屏展示效果
- Android Button按鈕點(diǎn)擊背景和文字變化操作
- 關(guān)于android連續(xù)點(diǎn)擊出現(xiàn)多個(gè)Activity界面的解決方法
- Android實(shí)現(xiàn)WebView點(diǎn)擊攔截跳轉(zhuǎn)原生
- Android擴(kuò)大View點(diǎn)擊范圍的方法
相關(guān)文章
Kotlin?this關(guān)鍵字的使用實(shí)例詳解
這篇文章主要介紹了Kotlin?this關(guān)鍵字的使用實(shí)例,在Kotlin中,this關(guān)鍵字允許我們引用一個(gè)類的實(shí)例,該類的函數(shù)恰好正在運(yùn)行。此外,還有其他方式可以使this表達(dá)式派上用場(chǎng)2023-02-02Android 快速實(shí)現(xiàn)防止網(wǎng)絡(luò)重復(fù)請(qǐng)求&按鈕重復(fù)點(diǎn)擊的方法
下面小編就為大家分享一篇Android 快速實(shí)現(xiàn)防止網(wǎng)絡(luò)重復(fù)請(qǐng)求&按鈕重復(fù)點(diǎn)擊的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android實(shí)現(xiàn)簡(jiǎn)單購物車功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)二級(jí)列表購物車功能 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10講解Android中的Widget及AppWidget小工具的創(chuàng)建實(shí)例
這篇文章主要介紹了講解Android中的Widget及Widget的創(chuàng)建實(shí)例,文中的例子展示了通過RemoteView來溝通AppWidgetProvider與AppWidgetHostView的方法,需要的朋友可以參考下2016-03-03Android自定義帶水滴的進(jìn)度條樣式(帶漸變色效果)
這篇文章主要介紹了Android自定義帶水滴的進(jìn)度條樣式(帶漸變色效果)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12Android端TCP長(zhǎng)連接的性能優(yōu)化教程分享
在開發(fā)過程中,我們經(jīng)常會(huì)用到TCP/IP連接實(shí)現(xiàn)即時(shí)數(shù)據(jù)傳輸,下面這篇文章主要給大家介紹了關(guān)于Android端TCP長(zhǎng)連接的性能優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2018-03-03Android 監(jiān)聽屏幕是否鎖屏的實(shí)例代碼
今天小編通過本文給大家分享android如何監(jiān)聽手機(jī)屏幕是否鎖屏。實(shí)現(xiàn)方法很簡(jiǎn)單,需要的朋友參考下吧2017-09-09Android創(chuàng)建與解析XML(二)——詳解Dom方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom方式 ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11