스레드 객체 및 메소드 내에서 메인 UI객체에 접근할수 없다!

그래서 핸들러가 필요하다.

Thread 내에서 Handler 객체를 이용하여 UI 객체와 값을 주고 받는다.

class ProgressHandler extends Handler{

   public void handleMessage(Message msg){ //handler를 통해 UI로 부터 값을 수신하는 메소드. (핵심)

      mytext.settext(msg.what);

   }

}

그리고 Activity쪽에서는 아래와 같이 쓰면 된다.

Thread thread = new Thread(new Runnable(){

   public void run() {

      Message msg = handler.obtainMessage(); // new로 매번 객체를 매번 만드는 대신 handler에게 msg달라고 요청

      msg.arg1 = '1111';

      msg.arg2 = '222';

      msg.object = Object;

      Message msg = Message.obtain(handler, '1111', '222', Object); // 또는 이렇게 한줄로 처리할수도 있다.

     //메세지에 값을 담아서 넘겨준다.

     handler.sendMessage(msg); // msg전송 handler객체의 handleMessage() 메소드가 호출된다

   }

}

 

루퍼: 무한루프 방식을 이용해 메시지 큐에 들어오는 메시지를 지속적으로 보면서 하나씩 실행

 

AsyncTask

백그라운드 작업을 좀 더 쉽고 간단하게 할 경우

AsyncTask 객체를 만들고 execute() 메소드를 실행하면 이 객체는 정의된 백그라운드 작업을 수행하고, 필요한 경우에 그 결과를 메인 스레드에서 실행하므로 UI 객체에 접근 하는데 문제 없게 됨

 

doInBackground

새로만든 스레드에서 백그라운드 작업 수행

execute()메소드를 호출할 때 사용된 파라미터를 배열로 전달받음

 

onPreExecute

백그라운드 작업 수행 전 호출

메인 스레드에서 실행되며 초기화 작업에 사용

 

onProgressUpdate

백그라운드 작업 진행 상태를 표시하기 위해 호출

작업 수행 중간 중간에 UI객체에 접근하는 경우 사용

이 메소드가 호출되도록 하려면 백그라운드 작업 중간에 publishProgress()메소드 호출

 

onPostExecute

백그라운드 작업이 끝난 후 호출

메인 스레드에서 실행되며 메모리 리소스를 해제하는 등의 작업에 사용

백그라운드 작업의 결과는 Result타입의 파라미터로 전달

 

class ProcessTask extends AsyncTask{

   doInBackground() //스레드 run()함수처럼 실행부분

   publicshProgress() //호출하면 onProgressUpdate()가 호출된다. (스레드에서 .start()하면 run()실행되는것 처럼)

   onProgressUpdate() //이 안에서 메인UI접근가능

   execute() //.start()와 같이 스레드 실행 함수

}

by wisegirl 2013. 3. 11. 22:28

안드로이드에서는 여러 객체에게 메세지를 전달하고 싶은 경우 브로드캐스팅을 사용한다.

문자 수신 또는 전화수신같은 글로벌 이벤트가 대표적.

전달되는 브로드캐스팅 메세지는 브로드캐스트 수신자 애플리케이션 구성요소에 의해 수신.

애플리케이션 구성요소 이므로 매니페스트 파일에 등록해야 함.

서비스 처럼 브로드캐스트 수신자도 화면을 구성하지 않음.

등록방식은 자바코드 상에서 registerReceiver()메소드로 등록

수신하고싶은 메세지가 있다면 그 메세지는 인텐트 필터를 이용해 등록함

 

<receiver android:name=>

 <intent-filter android:prority="1000">

  <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

 </intent-filter>

</receiver>

 

prority속성은 메시지 수신의 우선순위 결정, 숫자가 클 수록 우선순위 높음

  

by wisegirl 2013. 3. 6. 23:59

선택 위젯에서 어댑터는 데이터 관리 객체.

데이터 추가/삭제 등의 관리를 위해 setData(), getData()메소드 구현하여 이용

 

스피너 (Spinner)

<Spinner

   android:id

/>

spin.setAdapter()메소드로 어댑터 설정

ArrayAdapter<String> aa = new ArrayAdapter<String>{

   this, android.R.layout.simple_spinner_item, items);

aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

}

onItemSelected(AdapterView<?> parent, View v, int position, long id)

 

그리드 뷰 (Grid view) : 테이블 모양으로 데이터를 표현 (ex:월별 캘린더)

class DataGridView extends GridView{}

grid = new DataGridView(this);

grid.setAdapter();

 

갤러리 (Gallery) : 단말 내 앨범의 이미를 선택하여 불러올때 이용됨

<Gallery

   android:id

/>

gallery = (Gallery) findViewById(R.id.gallery)

gallery.setAdapter(new ImageAdapter(getApplicationContext()));

gallery.setOnItemClickListener(new OnItemClickListener(){}

by wisegirl 2013. 3. 6. 22:21