이전 활동을 완료하고 새 활동을 시작하거나 그 반대의 경우도 마찬가지입니다.
두 코드 스 니펫에서 동일한 결과를 얻는다는 것을 알고 있습니다.
finish();
startActivity(newActivity);
과
startActivity(newActivity);
finish();
그들 사이에 큰 차이가 있다면 당신의 의견을 알고 싶습니다. 하나가 다른 것보다 낫습니까? 그렇다면 그 이유는 무엇입니까?
startActivity ()를 수행하면 이벤트 대기열에 인 텐트를 게시하는 것뿐입니다. 활동의 실제 시작은 가까운 장래에 비동기 적으로 발생합니다. 그래서 나는 둘 사이에 큰 차이를 보지 못합니다.
애니메이션은 분명히 다릅니다 (적어도 4.1 이상). finish()먼저 호출 하면 첫 번째 활동이 더 일찍 사라지기 시작하고 새 활동이 페이드 인되기 전에 잠시 검은 색 배경을 볼 수 있습니다. startActivity()먼저 호출 하면 이전 활동 위에 새 활동이 사라지고 검은 색 배경이 보이지 않습니다.
Emmanuels 답변 외에도 :
두 메서드 startActivity및 둘 다 UI 스레드에서 처리되므로 호출 메서드가 끝난 후finish 예약됩니다 .
나는 두 번째 선택을 할 것입니다. 공식 소스에서 찾은 것에 대해서는 이것을 뒷받침하지 않지만 finish를 호출하기 전에 새 활동을 시작하는 것이 더 합리적입니다. 그러면 새 활동이 의도를 통해 팝업됩니다. , 이제 백그라운드 활동은 모든 정리 메소드를 호출 할 수 있습니다.
다른 방법으로 수행하면 청소가 완료되기 전에 의도가 실행될 시간이 없을 것입니다. 즉, 활동은 finish () 호출 후 startActivity ()를 호출합니까?
제가 말하려는 내용을 이해 하셨기를 바랍니다. 안전을 위해 두 번째 옵션을하겠습니다.
비슷한 문제가 있습니다.
Activity A: singleInstance
Activity B: singleInstance
Activity C: singleInstance
A starts B
B starts C
C wants to start A:
내가 사용하는 경우 여기 :
finish();
startActivity(A);
유선이 발생합니다. 활동 B가 A 대신 포 그라운드로 나옵니다! 하지만 다음과 같이 코드를 변경하면 :
startActivity(A);
finish();
모든 것이 정상이고 활동 A가 표시됩니다.
나는 문제가 무엇인지 모르겠지만 첫 번째 경우에는 C가 startActivity 명령을 실행하기 전에 완료되어 백 스택 이 상황을 처리하고 최상위 활동 인 B를 보여줍니다! 그러나 두 번째 경우에는 모든 것이 정상적으로 발생합니다.
나는 일반적으로 startActivity()이전 finish()에 새 화면이 나오기 전에 새 화면이 나오는지 확인하기 전에 수행합니다.
내 앱에 로그인 페이지가 있습니다. 사용자 로그인이 성공하면 로그인 활동이 사라지고 주요 활동이 시작됩니다. Android 4에서 잘 작동합니다.
오늘은 머티리얼 디자인으로 다시 쓰고 싶었습니다. 하지만 큰 문제가 생겼습니다. 새로운 Android 스튜디오는 많은 리소스를 필요로하는 머티리얼 디자인으로 빈 활동을 만듭니다. 같은 과정이지만 오류가 발생했습니다.
11-26 18:20:44.450 18397-18397/? I/Choreographer: Skipped 42 frames! The application may be doing too much work on its main thread.
11-26 18:20:44.485 18397-18408/? I/art: Background partial concurrent mark sweep GC freed 2864(191KB) AllocSpace objects, 4(43MB) LOS objects, 13% free, 100MB/116MB, paused 8.056ms total 39.767ms
mainActivity내 전화 logcat에서 시작할 때 내 앱이 많은 리소스를 사용한다고 말했습니다 . mainActivity기본 머티리얼 디자인 레이아웃이라는 점에 아무것도 없습니다 .
나는 순서를 바꾸었고 이제 내 전화에서 오류없이 작동합니다.
참고 URL : https://stackoverflow.com/questions/4182761/finish-old-activity-and-start-a-new-one-or-vice-versa
'Program Club' 카테고리의 다른 글
| R에 대한 표준 로깅 패키지가 있습니까? (0) | 2020.11.11 |
|---|---|
| 간단한 PHP 함수에서 "종속성 주입"을 어떻게 사용할 수 있습니까? (0) | 2020.11.11 |
| 조각을 사용하는 이유는 무엇입니까? (0) | 2020.11.11 |
| C ++에서 생성자와 소멸자가 인라인 함수가 될 수 있습니까? (0) | 2020.11.11 |
| '더 똑똑한'방식으로 파이썬을 사용하여 파일을 다운로드하는 방법은 무엇입니까? (0) | 2020.11.11 |