2012-01-31 2 views
3

저는 Android 라이프 사이클을 사용 중이므로 애플리케이션에 'exit'버튼을 추가 할 필요가 없습니다.Android back-button-cycle 문제

하지만 여전히이 뒤로 버튼 작업은 실제로 잘 작동하지 않습니다.

안드로이드와 함께 제공되는 기본 SMS-App에서이 문제를 알 수 있습니다. 새 메시지를 받으면 열어 메뉴 버튼이나 다른 것을 사용하여 종료하십시오. 20 회이 작업을 마치면 뒤로 버튼을 사용하여 앱을 종료하기로 결정했습니다. 어떻게됩니까? 당신은 20의 전망 그러나 돌아 가야한다. 다시 누르면 "모든 메시지 (보낸 사람 별)"목록보기로 돌아가고 다시 누르면 메시지 20-1 (메시지 19)로 돌아갑니다. 다시 당신은 뒤로 누르고 listview로 돌아가고 다시 18 번에서 다시 끝내고 끝납니다. 다시 40 번 누르면 마침내 messanger 앱이 종료됩니다.

예를 들어 앱의 기본 화면을 여는 "집"아이콘이있는 작업 표시 줄이있는 경우에도 마찬가지입니다. 사용자가 작업을 선택하고 새 작업이 시작됩니다. 사용자가 홈 버튼을 클릭하고 기본 화면으로 돌아가는 것보다 뒤로 버튼을 누를 때 - onButtonBack 리스너에서 finish()을 호출했는지 여부와 상관없이 사용자는 앱이 종료 될 것으로 기대하지만 실제로 앱은 이전의 잘못된 활동으로 돌아갑니다.

그런 싸이클은 여러 가지 이유로 발생할 수 있습니다. 즉, 내가 정의한 활동 내에서 다시 누르면 앱을 종료하지 않아도되는 이유를 알고 있다고 생각합니다.

전화 걸기()는 도움이되지 않습니다. 이전 활동이있는 경우 다시 열립니다. system.exit (0) 호출은 좋지 않습니다.

so : 이러한 백 프레스주기를 방지하고 응용 프로그램을 종료하는 올바른 방법은 무엇입니까 (파기 포함)?

나는 달성하고 싶은 것을 잘 보여줍니다. A, B, C가 활동으로 간주하십시오. 화살표 (->) 삽화 화살표의 활동 왼쪽에서 새로운 의도 호출, 화살표의 권리는 호출 활동을 나타냅니다. -> B pressBack : -> A - -> B> C pressBack

  • 1)를 - 예 : A> B 활동 A가 지금 여기에 활동 B. 시작 내가 원하는 것을 의미합니다 pressBack -> 종료
  • 2) A -> B pressBack ->를 pressBack -> 종료
  • 3) A -> B ->를 pressBack -> 종료

당신이 보는 바와 같이, 뒤로는 언제나처럼 작동하지만, 활동 A에서는 애플리케이션을 종료합니다.

지금 가지고 동작 1) 및 2) 상기 그러나

  • 3) A -> B ->를 pressBack ->를 pressBack -> 종료

나는 finish() 호출로 activity A의 onBackPressed 수신기를 이미 덮어 썼다는 것을 명심해야한다. 심지어 system.exit (0) dosnt work를 호출한다. 그러나 그것은 : 내가 원한 것이 아니고, 나는 그것을 할 수있는 진짜 방법이 필요하다. 안드로이드 스타일 - 나는 상상할 수 없다. system.exit (0)이 최선의 방법이다.

+0

나는이 링크는 당신을 도울 생각합니다. 이 질문은 당신과 비슷합니다. http://stackoverflow.com/questions/4732184/how-to-finish-an-android-application – superM

+0

AndroidManifest.xml 파일에 적용 할 수 있습니다. 원하는대로 에 android : noHistory = "true"속성을 추가하면됩니다. . nik431

+0

전혀 역사가 전혀없는 것 같습니다. 그래서 android : noHistory = "true"는 나를 위해 그것을 doint하지 않습니다. 하지만 나는 뒤로 버튼 사이클을 갖고 싶지 않습니다. 예 : 앱을 시작하고 활동 A가 열리 며 A가 B를 시작하고 B가 A를 시작하고 A가 B를 시작합니다. 다시 누르면 내가 한 번 돌아가고 싶습니다. 다음 버튼을 누르면 앱이 종료됩니다. "정상적인"행동은 다시 B로 돌아가고, 다시 한 번 누르면 다시 A로 돌아가고 마지막으로 다시 한 번의 누름으로 끝납니다. android : noHistory = "true"당신은 B에서 A로 돌아갈 수 없습니다 - 내가 원하는 것이 아닙니다. – masi

답변

4

이것은 기본 동작입니다.

다른 접근 방법이 있다면 구현하십시오. 이 다루는

한 가지 방법은 SMS 앱에서 SMS 페이지가 singleTop 인 경우, 예를 들어

(하나 개의 활동이 존재할 수) 싱글 방식으로 실행할 수 있습니다 활동의 android:launchMode="singleInstance"을 사용하는 것입니다 , 모든 SMS 페이지를 제거하기 위해 하나의 백 프레스 만 필요했을 것입니다. 선택의 문제입니다.


다른 활동을 시작하면 더 적극적인 방법으로 활동을 마칠 수 있습니다. 물론 이러한 결정은 앱의 친숙도를 떨어 뜨릴 위험이 있습니다 (안드로이드 사용자는이 행동에 익숙하지 않습니다). 그럼에도 불구하고 이것이 사용되는 경우에만 이 수용 가능하다고 간주 될 수 있습니다. 그럴 수도 있습니다.

이 작업을 수행하기에 매우 적합한 장소는 로그인 화면입니다. 로그인이 성공하면 다른 활동 (로그인 한 사용자를 위해 설계되었을 수 있음)을 시작하고 로그인 활동을 종료합니다.


내 개인 의견으로는, 당신은 종료 버튼을 추가 할 수 있습니다, 마지막으로 즐길 수 있습니다. 사용자는 멋있을 것입니다.

Check my post: Adding an Exit button to Android Application

+0

내가 찾는 것 같습니다. 오늘 저녁에 다시 시도하고 다시보고 할 것입니다. 지금까지 감사드립니다! – masi

+0

흠. 안돼. 나는 안드로이드 2.1에있어. – masi

+0

@masi 정확히 무엇을 시도 했습니까? 그리고 didnt 일? –