2011-04-25 2 views
0

iOS 백그라운드에서 Android로 이동하면서 Android 프로그래밍의 라이프 사이클 메소드가 예상대로 설정되지 않았습니다.Android 라이프 사이클 메소드가 필요로하는 방식으로 작동하지 않는 것 같습니다.

예를 들어 사용자가 내 앱을 사용할 때마다 한 번씩 작업을 수행해야합니다. 앱은 실행되는 여러 아동 활동을 유발하는 주요 활동으로 구성됩니다.

주 작업의 onCreate() 메서드에 작업을 넣으면 사용자가 응용 프로그램을 처음 시작할 때 확실히 호출됩니다. 그러나 사용자가 앱을 종료하고 나중에 다시 입력하면 항상 호출되는 것은 아닙니다. 나는 이것이 Android가 활동을 실제로 파괴하지 않았기 때문에 이것이 다시 생성 할 필요가 없다고 생각합니다.

대신 onStart() 또는 onResume() 대신에 작업을 넣으면 사용자가 응용 프로그램을 시작할 때마다 호출되지만, 자식 활동 중 하나에서 돌아올 때마다 호출됩니다. 내가 원하는거야.

사용자가 앱을 시작할 때마다 한 번만 실행되도록 내 작업을 배치 할 수 있습니까?

감사합니다.

답변

1

예를 들어, 'showSplash'와 같은 주요 활동에 대한 전역 부울을 정의하고이를 "true"로 초기화하십시오. 그런 다음 'onCreate'메소드가 처음 호출되면이를 "false"로 설정합니다. 그런 다음 'onCreate'메서드가 호출 될 때마다 부울 값이 "false"인지 확인합니다. 그렇다면, 스플래시 나 원하는 것을 보여줄 수 없습니다. 그렇지 않은 경우, 보여 주거나하고 싶은 일을하십시오.

편집 :

안 좋은 접근 방식과 같은 전 주석 말했다 - onPause에서 마무리()를 호출().

+0

응용 프로그램이 닫히는 시점을 어떻게 알 수 있습니까? 똑같은 문제 같아. –

+0

당신은 강제로 응용 프로그램을 닫아야합니다. 이것은 꽤 좋은 접근 방법이 아닙니다. – evilone

+0

내가해야 할 일은 서브 클래스 응용 프로그램이라고 생각합니다.Application 클래스에 대한 문서에서 "AndroidManifest.xml의 태그에 이름을 지정하여 사용자 고유의 구현을 제공 할 수 있으므로 응용 프로그램/패키지의 프로세스를 만들 때 해당 클래스가 인스턴스화됩니다. " 그러나 태그에 대한 설명서에서 Application 클래스의 이름을 지정하기위한 속성을 찾을 수 없습니다. –

0

나는 이것에 대해 읽었으며 Application 클래스에서 onCreate() 메서드를 발견했습니다.

아마도 애플리케이션을 서브 클래스 화하고이 메소드를 대체하여 필요한 것을 구현할 수 있습니다. Cocoa의 Application Delegate 클래스처럼 작동한다고 생각하지만 100 % 확실하지는 않습니다.

면책 사항 : 아직 시도하지 않았습니다.

+0

방금 ​​해 보았습니다. 작동하지 않습니다 - 사용자가 앱을 실행할 때마다 Application의 onCreate()가 호출되지 않습니다. 처음으로 또는 앱이 파괴되어 다시 시작된 경우. –

0

불쾌한 방법은 호출/이전 활동을 확인하는 것입니다. 자신이 아닌 경우 초기화 코드를 호출하십시오. how to know the calling activity in android은 좋은 방법을 보여줍니다. 자신의 내부 활동 각각에 putExtra(..) 메소드를 사용하여 자신의 것으로 플래그를 지정하십시오.

0

시도해 보지 않았지만 android.app.Application 클래스의 하위 클래스를 가질 수 있으며 onCreate 메소드를 구현할 수 있습니다. 워드 프로세서

Called when the application is starting, before any other application objects have been created. Implementations should be as quick as poss 
0

프랭크에 따르면 ... 나는이 작업을 수행하는 방법은 onSaveInstanceState에서 번들을 작성하거나 onRetainNonConfigurationState에 직렬화 객체를 작성하는 것입니다. 그런 다음 의사 코드에서 onCreate에서 수행합니다.

state= getLastNonConfigurationStateInstance or 
onCreate(Bundle state) 

if (state == null) { // APP LAUNCHED FIRST TIME 
... getPrefs 
... if (prefs != null) get state from prefs 
....getIntent 
... if (intent != null) get state from getExtras 
... check sharedPrefs for EULA_ACCEPTED_FLAG 
// SUPPORT EULA 
      SharedPreferences eulaPrefs = getSharedPreferences(PREFERENCES_EULA, MODE_PRIVATE); // singleton 
      if (eulaPrefs == null || (eulaPrefs != null && eulaPrefs.getBoolean(PREFERENCE_EULA_ACCEPTED, false) == false)) { 
       showDialog(DIALOG_EULA_ACCEPT); 
      } 
} 
else { // APP LAUNCHED AT LEAST SECOND TIME 
... 
} 
관련 문제