총 게시물 38,775건, 최근 3 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

Android 버전에 따라 onActivityResult의 호출순서가 다른거 같은데...

글쓴이 : 소바 날짜 : 2017-09-14 (목) 18:50 조회 : 443
글주소 : http://www.androidside.com/B49/168379
안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

오래간만에 들어와서 도움 청합니다.

Android 버전에 따라 onActivityResult을 호출하는 순서가 다른데 원인을 몰라서 질문 드립니다.
현재 Android 버전 5.0이상에서는 Activity를 먼저 호출하고 호출된 Activity가 닫히면 startActivityForResult을 호출 하는데
Android 버전 4.1.2에서는 호출하고자 하는 Activity가 먼저 열리지 않고 startActivityForResult를 호출한 다음에
Activity가 열리고 있는데 뭐가 다른건가요?
예전에는 괜찮았던거 같은데 갑자기 처리가 이상해 졌습니다.


원하는 처리의 순서는 
5.0이상에서는 SchedActivity -> SiteLstActivity -> startActivityForResult 순서로 잘 호출됩니다.
그런데 
4.1.2에서는 SchedActivity-> startActivityForResult -> SiteLstActivity  순서로 호출이되서 SiteLstActivity에서 설정한 값을 받아오지 못하고 있습니다.
4.x버전에 모두 그런거 같은데 현재 테스트용 단말의 버전이 4.1.2라 이 버전만 확인했습니다.

    btnSite.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(SchedActivity.this, SiteLstActivity.class);
            intent.putExtra("_CompCd", strCompCd);
            startActivityForResult(intent, 10);
       }
    }); 

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(data != null)
        {
            if(requestCode == 10 && resultCode == 0) {
                if(data.getStringExtra("strSiteNm").equals("") == false){
                    txtSiteNm.setText(data.getStringExtra("strSiteNm"));
                    txtSiteCd.setText(data.getStringExtra("strSiteCd"));
                }
            }
        }
    }




질문자가 자신의 포인트 100 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 80을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

안사 이쁜이 2017-09-14 (목) 18:50
축하드립니다. ;)
소바님은 안사 이쁜이에 당첨되어 1 포인트 지급되었습니다.
OSKiller 2017-09-15 (금) 08:26
onActivityResult? startActivityForResult? 
저만 질문이 잘 이해가 안되나요? ㄷㄷㄷ
댓글주소 추천 0 반대 0
     
     
소바 2017-09-15 (금) 09:22
[@OSKiller]
제 질문이 좀 서툴렀습니다.
SchedActivity -> SiteLstActivity -> startActivityForResult -> onActivityResult순서로 잘 호출되어야 하는데 
4.1.2에서는 SchedActivity-> startActivityForResult -> onActivityResult -> SiteLstActivity  순서로 호출되고 있습니다.

댓글주소 추천 0 반대 0
OSKiller 2017-09-15 (금) 10:07
startActivityForResult 는 어느 activity에서 하고 있는거죠?
finish는 어떤 액티비티에서 하고 있나요?

순서는 어떻게 확인 하신건가요?
로그를 이용하신건가요? 아니면 디버그로 스텝을 따라 가셨나요?

댓글주소 추천 0 반대 0
     
     
소바 2017-09-15 (금) 12:46
[@OSKiller]
    btnSite.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(SchedActivity.this, SiteLstActivity.class);
            intent.putExtra("_CompCd", strCompCd);
            startActivityForResult(intent, 10);
       }
    }); 

finish는 SiteLstActivity 이 Activity에 있습니다.
확인은 디버그로 스텝을 따라가면서 확인했습니다.
댓글주소 추천 0 반대 0
뉴키 2017-09-15 (금) 13:30
SchedActivity -> SiteLstActivity -> startActivityForResult -> onActivityResult

?? startActivityForResult 는 부모액티비티에서 실행되고 onActivityResult 도 부모에서 실행됩니다.

호출받은 액티비티와는 관계가 없어요.

SchedActivity에서 startActivityForResult (SchedActivity onStop) -> SiteLstActivity -> (SiteLstActivity 에서 finish) SchedActivity 에서 onActivityResult

순입니다.

돌아오는 과정을 제대로 구현하시려면 onActivityResult 안에 모든 기능이 들어가야 하는 게 맞구요

SiteLstActivity 에서 설정한 값을 finish전에

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);

이런 식으로 되돌려줘야 합니다. 
댓글주소 추천 0 반대 0
OSKiller 2017-09-15 (금) 14:02
startActivityForResult을 하지도 않았는데 SiteLstActivity이 열린다고요?
전혀 이해가 안되는군요
부르지도않았는데 어떻게 호출 되죠?

그리고 디버그로 따라가지 말고 로그 찍어서 실제 호출 되는 순서를 확인 해보세요
절대 순서가 바뀔리 없습니다
댓글주소 추천 0 반대 0
     
     
소바 2017-09-15 (금) 15:53
[@OSKiller]
저도 참 답답합니다.

다시 정리 하자면 A Activity에서 startActivityForResult로 B Activity을 호출해서 B Activity 표시되고 B Activity에서 필요한 값을 설정후에 finish을 하면
A Activity에 돌아와서 onActivityResult 메소드가 호출되는게 정상인데...Android 5.0이상에서는 문제없이 잘됩니다.
문제는 Android 4.1.2에서는 
B Activity가 표시되지 않고 바로 onActivityResult메소드를 호출한 다음에 B Activity가 표시되고 있다는 겁니다.
댓글주소 추천 0 반대 0
     
     
소바 2017-09-15 (금) 16:16
[@OSKiller]
혹시나 해서 로그 떠서 첨부합니다.
Android 4.1.2에서
09-15 07:13:18.600: D/msg(7520): main setOnClickListener.....................
09-15 07:13:18.660: D/msg(7520): main setOnClickListener...startActivityForResult..................
09-15 07:13:18.660: D/msg(7520): main onActivityResult.....................
09-15 07:13:18.690: D/msg(7520): sub onCreate.....................
09-15 07:13:20.892: D/msg(7520): sub reIntent.putExtra.....................
09-15 07:13:20.892: D/msg(7520): sub setResult.....................
09-15 07:13:20.912: D/msg(7520): sub finish.....................

Android 5.0에서
09-15 16:14:11.355: D/msg(30313): main setOnClickListener.....................
09-15 16:14:11.395: D/msg(30313): main setOnClickListener...startActivityForResult..................
09-15 16:14:11.465: D/msg(30313): sub onCreate.....................
09-15 16:14:13.015: D/msg(30313): sub reIntent.putExtra.....................
09-15 16:14:13.015: D/msg(30313): sub setResult.....................
09-15 16:14:13.025: D/msg(30313): sub finish.....................
09-15 16:14:13.075: D/msg(30313): main onActivityResult.....................

댓글주소 추천 0 반대 0
          
          
뉴키 2017-09-15 (금) 16:45
[@소바]
뭐지-_-;'
댓글주소 추천 0 반대 0
소바 2017-09-15 (금) 18:40
해결 했습니다.
신경써 주신분들께 감사 드립니다.

혹시나 같은 현상으로 고민하신는 분들이 계시면 참고 하세요.
AndroidManifests에서 서브Activity 설정에 android:lauchMode="singleTask"이걸 넣었던게 문제 였네요. 
삭제 했던이 문제 없이 잘 됩니다.

감사합니다.
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기