이 블로그 검색

2011년 10월 18일 화요일

쓰레드 사용 - ANR 방지

기본적인 쓰레드 사용
1. new Thread(new Runnable()).

2. run() 안쪽에 멀티 쓰레드로 처리할(메인 쓰레드에서 뺄 작업) 로직 삽입.
3. Handler 객체에 sendEmptyMessage()로 전달
4. 핸들러 객체 따로 구현, handleMessage() 내에 UI 작업 삽입.


<싱글 쓰레드의 경우>
----> 싱글 쓰레드(main 쓰레드) ---> 입력 UI --> [Data 처리 - Ex)서버 연동, DB 연동 etc ] --> 화면 출력 이 과정에서 ANR 발생 (UI무응답)


<멀티 쓰레드를 이용하는 경우>
----> 싱글 쓰레드(main 쓰레드) ---> 입력 UI --> --> 화면 출력
멀티 쓰레드 ---> [Data 처리 - Ex)서버 연동, DB 연동 etc ]


public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     
        setContentView(R.layout.act_setup_friendrecommend);

        dialog1 = DialogUtils.createProgressDialog(this, "gringphone06_01");

new Thread(new Runnable(){
public void run(){
init();   <-- Data 처리 등 시간이 많이 걸리는 부분
mHandler.sendEmptyMessage(0);
}
}).start();
    }


Handler mHandler = new Handler()
{
public void handleMessage(Message msg)
{
switch(msg.what)
{
case 0:
btnRecommend.setText(StringUtils.getString(Act_Setup_FriendRecommend.this, "recommend"));
lvSelectList.setAdapter(selectPersonListAdapter);    <-- UI 처리 부분

break;
}
}
};

댓글 없음:

댓글 쓰기