2010-11-29 2 views
10

지금 당장은 이해가되지 않는 부분이 있습니다.Android : onCreate() 여러 번 호출 됨 (나로부터가 아님)

내 주요 활동 클래스는 TCP 연결을 기다리는 새 스레드를 만드는 서비스를 만듭니다. 하나에서 제공되면, 새로운 활동이 시작됩니다 : 그 후

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class); 
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress()); 
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(dialogIntent); 

을, 그 클래스의 onCreate() 방법이 실행됩니다. 그것은 하나의 레코드와 데이터를 전송하고, 다른 하나는 데이터를 수신하고 재생하는 두 개의 스레드를 생성합니다. 그 스레드는 while 루프를 가지고 있습니다.

어떤 이유로 든 마지막 클래스의 onCreate()이 다시 호출되어 프로그램이 다운되는 것을 발견했습니다. 두 스레드가 실행 중일 때 왜 다시 호출되는지 이해할 수 없으며 사용자 상호 작용이 없습니다. 설명서에 "활동을 처음 만들 때 호출됩니다." 활동이 이미 실행 중이고이를 만들려고하지 않습니다.

누군가이 문제를 설명해 주시겠습니까?

답변

13

Android는 특정 "기기 구성 변경"후 활동을 다시 만듭니다. 그러한 예가 오리엔테이션입니다. 당신은 여기에서 더 많은 것을 읽을 수 있습니다 ... http://developer.android.com/guide/topics/resources/runtime-changes.html

아마도 스레드의 구성이 구성 변경으로 간주됩니다.

그럴 경우 Application 클래스를 확장하고 거기에서 초기화하는 것이 유용 할 수 있습니다. Activity restart on rotation Android

HTH

+0

대단히 감사합니다! – James

+0

방금 ​​벽에서 내 머리를 두드려서 나를 구해준 시간은 ... –

0

나는 개발자 옵션의 응용 프로그램 섹션에서 "작업을 저장하지 않음"을 사용 할 때 한 번 내게 일어난 ...이 게시물을 참조하십시오. 이 기능을 해제했는지 확인하십시오.

3

일부 삼성 장치에서 두 번 호출되는 활동이 발생했습니다. Manifest의 Activity 태그에서 android : launchMode = "singleInstance"를 추가하여 해결했습니다. 나는 이것이 도움이되기를 바랍니다.

0

의도가있는 값으로 활동을 시작하려고 할 때이 문제점을 관찰했습니다. 다음은

는 Activity_A가 Activity_B를 호출하고 Activity_B에서 수집 할 수있는 의도에 값을 전달 예입니다

이 경우
Intent intent = new Intent(this, activityB.class); 
intent.putExtra("val1", someValue1); 
intent.putExtra("val2", someValue2); 
intent.putExtra("val3", someValue3); 
this.StartActivity(intent); 

, 설정할 수있는 사용자의 AndroidManifest.xml 및 Activity_B에 android:launchModel="singleInstance" 또는 android:launchModel="singleTop" 것 한 번만 시작하십시오. 희망이 도움이됩니다.

관련 문제