簡體   English   中英

Android中的“ finishAffinity();”和“ finish()”方法有什么區別?

[英]What is the difference between `finishAffinity();` and `finish()` methods in Android?

我在登錄屏幕上使用了一些代碼,如果用戶不想登錄,則該應用程序將強制關閉應用程序。如果用戶選擇不登錄/取消,則它將調用該代碼以退出應用程序。 我已經成功完成了這兩種方式的操作(不是同時):

finishAffinity();
 System.exit(0);

finish();
 System.exit(0);

然而,這兩行代碼似乎都在做相同的事情...該應用程序對用戶關閉,但仍保留在后台應用程序中,如果用戶單擊“概述”按鈕,他們可以選擇重新打開該應用程序。 (這只是重新啟動提示以登錄。)

由於我注意到沒有功能上的區別,所以我想知道finishAffinity()finish()方法之間有什么區別?

獎勵問題:另外,有沒有辦法完全關閉該應用程序,因此它也不會出現在概述按鈕應用程序列表中?

finishAffinity()finishAffinity()不用於“ 關閉應用程序 ”。 它用於從當前任務中刪除多個屬於特定應用程序的活動(其中可能包含屬於多個應用程序的活動)。

即使您完成了應用程序中的所有“活動”,托管應用程序的OS進程也不會自動消失(就像調用System.exit() )。 Android最終會解決您的問題。 您對此沒有控制權(這是有意的)。

finish() :在活動中調用finish()時,將執行onDestroy()方法,該方法可以執行以下操作:

  • 取消活動正在管理的所有對話框。

  • 關閉活動正在管理的所有游標。

  • 關閉任何打開的搜索對話框。

finishAffinity()

完成此活動以及當前任務中緊接其下的所有具有相同關聯性的活動。

完()

活動完成且應關閉時調用此函數。 通過onActivityResult()ActivityResult傳播回發起您的任何人。

有關更多信息,請通過以下鏈接進行: https : //developer.android.com/reference/android/app/Activity

finishAffinity():

關閉當前堆棧中存在的所有活動

完()

關閉僅打開的活動

另外,有沒有辦法完全關閉該應用程序,因此它也不會出現在概述按鈕應用程序列表中?

是的,您可以android:noHistory="true"android:noHistory="true" activities tagManifest.xml activities tag

finishAndRemoveTask()方法從堆棧中彈出所有活動,並從最近的任務列表中刪除該應用程序,只需簡單地完成此當前活動以及當前任務中緊隨其后的所有具有相同親和力的活動, finish()方法就會彈出您當前的活動堆棧中的活動。 詳細文檔鏈接

finishAffinity() :完成當前活動以及當前任務中緊隨其后的所有具有相同相似性的活動。 finishAndRemoveTask() :完成活動並應將其關閉,並且在完成任務的根活動的過程中應完全刪除任務,請調用此函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM