A Activity, B Activity 가 있습니다.
A는 manifest에 android:launchMode="singleTask" 로 되어있는 상태구요
public class A extends Activity{
public void onCreate(){
Log.w("TEST", "AAAAAAAAAA");
Log.w("TEST", "onCreate msg = " + getIntent().getStringExtra("msg"));
startActivity(new Intent(this, B.class);
}
public void onRestart(){
Log.w("TEST", "AAAAAAAAAA");
Log.w("TEST", "onRestart msg = " + getIntent().getStringExtra("msg"));
}
}
public class B extends Activity{
public void onCreate(){
Log.w("TEST", "BBBBBBBBBB");
Intent i = new Intent(this, A.class);
i.putExtra("msg", "from BBBBBBB");
startActivity(i);
}
}
소스는 이게 끝입니다.
A액티비티가 main액티비티어서 A->B->A 순으로 이동을 하게 됩니다.
결과는
AAAAAAA
onCreate msg = null
BBBBBB
AAAAAAA
onRestart msg = null
이렇게 나오네요.
A액티비티가 살아있기때문에 새로 호출할때 restart가 호출되고 intent도 생성할때 당시의 intent를 getIntent()로 읽어 들여서 extra값이
null이라고 찍히는걸로 보이는데
B액티비티에서 넣은 extra값을 A 액티비티에서 restart때 얻으려면 어떻게 해야하나요.....
하루죙일 하는데 몰겠네요 ㅠㅠ 고수님들 plz. 도와주십쇼......ㅠ,ㅠ




A 액티비티에서 onNewIntent(Intent intent)를 아래처럼 오버라이드하세요..
protected void onNewIntent(Intent intent) {
setIntent(intent);
}
singleTask나 singleTop의 경우 intent 사용시는 좀 주의해야 합니다. 자세한것은 프레임워크가 좀 복잡하게 구현되어있는지라 설명하기 힘들
지만...
간단하게 태스크(액티비티스택)에 올라있는 액티비티를 startActivity하는경우 Activity 개개에 실제 연결된 intent는 갱신이 안되고 처음 생성됬을때의 intent만을 계속 가리키게 됩니다.. 위의 onNewIntent(Intent) 는 내부적으로 intent시 콜백되는데 default로는 내용이 텅비어있고 파라미터로 넘어오는 intent가 startActivity를 호출하는 액티비티측에서 넘겨주는게 직접 전달되게 됩니다.
내가쓰고도 참 복잡하군요.. 잘 이해안되시죠 ㅡ.ㅡ;
자세한것은 developer 싸이트에서 관련자료 찾아보시는게 나을듯..