마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

asynctask 사용후 액티비티멈춤

0 추천
A라는 액티비티가 호출되면 온크리트하면서 B라는 asynctask를 실행합니다..

문제가.. B라는 asynctask까지는 정상적으로 실행이되서 작업을 완료하는데 그후에

액티비티상에 존재하는 버튼이 들어먹지를 않습니다.. 뭔가 잘못 한 건가요

도와주세요
익명사용자 님이 2014년 6월 23일 질문

1개의 답변

0 추천
 
채택된 답변
B라는 어싱크 타스크의 온포스트익스큐트에서 기존의 A 액티비티를 덮어버리는 뷰가 활성화가 되던지

아님 거기서 A액티비티상의 존재하는 버튼들을 무용지물 시켜버리는 무언가가 존재하던지..

이건 소스를 보기 전에 대답해드리기 힘드네요. 오류코드도 없고.
쭈쭈총각 (17,750 포인트) 님이 2014년 6월 23일 답변
온포스트익스큐트 사용중인데 A액티비티를 덮어버리는 뷰가 활성화 된다는부분 조금만 더 자세히 알려주세요.. 오류코드는 없습니다. 단지 화면이 무반응이 될뿐이라서..
흠...;; 말그대로 A액티비티 위에 새로운 View가 떠있게되면 뒤에 있는 A액티비티 버튼들의 이벤트가 활성화 되지 못합니다. 즉 반응을 할 수 없게 되는거죠. 소스 보여주세요. 그럼 알 수 있을 것 같은데요.
온포스트익스큐트 부분에서 뷰생성해 쓰고있습니다 해당부분 소스입니다.

@Override
        protected void onPostExecute(String result) {
            LinearLayout bodyWapper = (LinearLayout)findViewById(R.id.diagResultLayout);
            LinearLayout diagInfomation = (LinearLayout)findViewById(R.id.diagInfomation);
            LinearLayout diagSubMenu = (LinearLayout)findViewById(R.id.diagSubMenu);
            TextView diagCount = (TextView)findViewById(R.id.count);
           
            ArrayList<DiagResultListBean> listViewItem = null;
            int diagSize = 0;
           
            for (Map.Entry<String, List<DtcHistoryBean>> dtcHistoryBean : diagResultMap.entrySet()) {
                createTitleView(bodyWapper, diagResultMap.get(dtcHistoryBean.getKey()).get(0).getPartName());
                listViewItem = new ArrayList<DiagResultListBean>();
               
                List<DtcHistoryBean> historyBeans = diagResultMap.get(dtcHistoryBean.getKey());
               
                if (historyBeans.size() > 1) {
                    diagSize += historyBeans.size();
                }
               
                for (DtcHistoryBean historyBean : historyBeans) {
                    DiagResultListBean diagResultListBean = new DiagResultListBean(dtcHistoryBean.getKey(), historyBean.getDispDtcCode(), historyBean.getMessage(), historyBean.getReason(), historyBean.getCheckLocation());
                    listViewItem.add(diagResultListBean);
                }
               
                createListView(bodyWapper, listViewItem);
            }
           
            diagCount.setText(diagSize + " ");
            diagSubMenu.setVisibility(View.VISIBLE);
            diagInfomation.setVisibility(View.VISIBLE);
            super.onPostExecute(result);
        }
제가 앞서 예상한대로 그대로 코딩이 되어 있으시네요. 어싱크타스크를 실행하고 결과가 성공적으로 실행되므로서 메인스레드(UI 스레드에서) onPostExcute()에서 위 소스가 실행이 되는데요.
아 주 정확한건 모르겠지만 메인 액티비티 위에
타이틀뷰와 리스트뷰가 생성이 되고, 별도로 diagSubMenu와 diagImfomation이 visible 되네요.
이정도 정황을 미루어 볼 떄,  이전 액티비티위에 저러한 뷰들이 덮혀져서
이전 액티비티 버튼의 클릭 이벤트 핸들러가 반응을 할 수 없는 지경인 것 같습니다.
해결 하자고 하신다면 겹치는 뷰가 없게 하던가 여기서 무언갈 처리하고 다시 뒤로 돌아가는 형식을 하셔야 합니다.  별도의 뷰를 이렇게 호출 할때에는 기본적으로 이전 액티비티의 이벤트를 할 수 없다는걸 가정하고 설계를 하셔야 합니다.
일반적으로 액티비티에서 팝업을 뛰웠을때 팝업 외에는 무언갈 할 수 없는거와 똑같습니다.
참고해서 한번 해보도록 하겠습니다 고맙습니다.
...