안녕하세요.
Activity를 사용하는 것에 있어 해결이 안되는 부분이 있어 조언을 구하고자 합니다.
특정 application에 A activity와 B activity가 있습니다.
A Activity의 launchmode는 메세지의 첨부 등 여러 앱에서 접근가능해야해서 standard로 되어 있고
B Activity는 A와 동일기능이지만 심플하게 구성되고 미니팝업창처럼 다른 activity의 top에서 실행이 되어야해서 singletask로 구현된 상태입니다.
그런데 A와 B Activiy는 서로 동시에 실행할 수는 없습니다.
A에서 B실행시(또는 B->A호출시) A 또는 B가 onPause가 되면 모든게 해결됩니다만 실제로 호출되지 않아 문제가 발생합니다.
A,B Activity를 모두 singleTask로 설정시 이 문제는 해결되나 메세지첨부에서 A activity실행시 첨부가 되지 않는 다른 문제가 발생합니다.
1. B Activity 실행중 A 실행시 B activity를 강제 종료하도록 할 수 있는지요?
(broadcast로 intent를 날려도 intent를 늦게 받아서 onPause는 늦게 실행됩니다.)
2. 두 activity모두 singleTask로 설정후 메세지첨부에서 A activity 실행시 동적으로 standard형태로 intent를 줄 수 있는지요?
조언부탁드립니다.
감사합니다.
첫댓글 세부적인 환경을 알 수 없어 1차원 적인 답변만 드릴수 있겠네요.
1. 가능합니다. 아마도 B가 A액티비티를 실행했을때만 종료하고 싶으시다면
A에서 getCallingActivity() 함수를 통해 자신을 실행한 Activity의 ComponentName을 알 수 있으니
자신을 실행한 종료시킬 수 있겠네요.
2. 동적으로 standard intent를 줄 수는 없습니다.
상황을 보면 매우 복잡하네요.
전후 사정을 모르면 정확한 답은 드릴 수 없습니다. ^^; 이해 부탁드립니다.
네 세부적인 환경을 알려드리지 못해 어느정도 예상은 했습니다.^^;;
1의 경우는 A->B 직접실행이 아니라 B는 launcher나 다른 app에서 접근입니다.
(즉 A->B(B->A) 직접 호출하진 않습니다.)
에고 초보라 어렵네요..
A,B는 서로 배타적인 관계인가 보군요.
A가 뜬 상태에서 B가 뜨면 A가 종료되어야 하고...뭐그런..
B가 구동될때 A 액티비티를 종료하시려면
A 액티비티의 인스턴스를 가지고 있으셔야 겠네요.
즉 A.finish() 를 사용해야 하니까요.
그러므로 A 액티비티가 onCreate 에서 자신의 객체를
static 변수 혹은 Application 객체 멤버변수에 담아 두고
onDestory에서는 제거하는 과정이 있어야 겠네요.
그 다음 B 액티비티에서 A 액티비티를 참조하여 finish 시키면 됩니다.
만일 A Activity에서 static 으로 담을 때에는
public static Activity sAActivity = null;
onCreate()
{
sAActivity = this;
이렇게 하시면 될 것이고
Application 객체로 처리하시려면 ...
제 강좌중 http://cafe.daum.net/superdroid/aCJk/3 을 참조하시면 되겠습니다.