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

AsyncTask 사용시...

0 추천

앱의 라이센스고지를 위해 asset의 라이센스를 적어논 txt 파일을 읽어서 다이얼로그 액티비티에

표시하고자 작업을 했습니다.

근데 라이센스 내용이 조금 길다보니 액티비티 넘어가는 딜레이가 1초정도 생기기에 라이센스 표시하는

부분을 AsyncTask로 돌리고 그 사이 메인스레드에서는 프로그레스바를 돌리려고 하였습니다.

        @Override
        protected String doInBackground(String... arg0) {
            try {
                Thread.sleep(2000);
                text = "abcd";
                /*
                InputStream is = getAssets().open("copyright.txt");

                int size = is.available();
                byte[] buffer = new byte[size];
                is.read(buffer);
                is.close();

                text = new String(buffer);
                noticelicence.setText(text);
                */
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

라이센스파일 읽는 부분입니다.

근데 위 소스의 주석부분을 해제하고 돌리면(Thread.sleep은 주석처리) AsyncTask까지 다 돌고난후에 

해당 액티비티가 뜨더라구요,,(프로그레스바는 당연히 구경도 못함..)

이게 뭐지 해서 위 소스 처럼 Thread.sleep을 넣고 돌리니

정상적으로 액티비티 뜨고 2초 동안 프로그레스바 뜬후에 abcd가 찍히거든요..?

이거 어떻게 이해하면 될까요..? 제가 여기서 뭐 잘못 알고있는게 있을까요...? 도와주세요..

 

내용 추가 합니다. 일단 Thread.Sleep(1000)을 무조건 주게해서 강제적으로 프로그레스 바를 보여주기는

했는데 찜찜하네요.. 왜 이런지.. 이해가 안가서...

익명사용자 님이 2014년 10월 10일 질문
2014년 10월 10일 수정
noticelicence.setText(text); 는 doInBackground안에 있으면 안됩니다

2개의 답변

0 추천
AsyncTask를 사용한 코드를 올리세요.
익명사용자 님이 2014년 10월 10일 답변
setContentView(R.layout.notice_license);

findViewById(R.id.progressBar).setVisibility(View.VISIBLE);
new NoticeLicenseTask().execute();

onCreate에서 생성해 사용하고 있습니다. onCreate안에 정의된 소스코드는 댓글에서 적은 코드가 전부입니다. 감사합니다.
0 추천
ProgressDialog 가 안 뜬다는 것 같은데 AsyncTask의 onpreexecute 에서 dialog.show() 하시고

onpostexecute 에서 dialog.dismiss() 하시면 됩니다
익명사용자 님이 2014년 10월 28일 답변
asynctask 자체가 dialog에서 돌아가고 있구요..
해당 dialog안에서 프로그래스바를 보여주고 있습니다..
프로그래스바는 xml에서 정의해서 visible gone으로 컨트롤 하고 있습니다..
...