모각코 4회차(10.21)

기먼지·2022년 10월 23일
0

모각코코볼

목록 보기
4/11

메뉴

안드로이드의 메뉴는 옵션 메뉴와 컨텍스트 메뉴로 구분

옵션 메뉴

-메뉴 XML 파일 생성 후 Java에서 호출
-Java 코드만으로 메뉴를 생성하는 방법

  • 메뉴 폴더 생성 및 메뉴 XML 파일 생성, 편집
  • Java 코딩: onCreateOptionMenu() 메소드 오버라이딩
public boolean onCreateOptionsMenu(Menu menu) {
	super.onCreateOptionsMenu(menu);
    MenuInflater mInflater = getMenuInflater();
    mInflater.inflate(R.menu.메뉴XML아이디, menu);
    return true;
}
  • Java 코딩: onOptionsItemSelected() 메소드 오버라이딩

컨텍스트 메뉴

-레이아웃 또는 버튼, 에디트텍스트 등의 위젯을 롱클릭하면 나타남
-windows의 팝업창과 비슷

  • 메뉴 폴더 생성 및 위젯의 메뉴 XML 파일 생성, 편집
  • Java 코딩: onCreate() 안에 registerForContextMenu()로 등록
  • Java 코딩: onCreateContextMenu() 메소드 오버라이딩
  • Java 코딩: onCreateItemSelected() 메소드 오버라이딩

프래그먼트

-레이아웃 안에 부분 화면으로 레이아웃을 넣을 수 있음
-태블릿과 같이 큰 화면에서는 한 화면에 여러 부분화면을 넣는 것이 효율적임
-프래그먼트는 부분화면을 독립적으로 만들어주며 액티비티를 그대로 본떠 생성
-하나의 액티비티에 하나의 프래그먼트를 전체 화면으로 보여주면 시스템과 관계없이 전체 화면을 전환하는 효과를 만들 수 있음
-프래그먼트는 액티비티 위에 올라가야 프래그먼트로 동작함 (프래그먼트는 각각 하나의 자바 파일과 xml 파일이 있어야 함)
-인플레이션을 위한 별도의 콜백 메소드를 제공함
-독립적인 상태 유지를 위해 수명주기 메소드를 제공함

비동기 처리 쓰레드

-메인 액티비티

  • 애플리케이션이 실행될 때 하나의 프로세스에서 처리
  • 이벤트를 처리하거나 필요한 메소드를 정의하여 기능을 구현하는 경우에도 동일한 프로세스 내에서 실행

-문제점

  • 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 됨

-해결 방안

  • 하나의 프로세스 안에서 여러 개의 작업이 동시 수행되는 멀티 쓰레드 방식을 사용

-멀티 쓰레드

  • 같은 프로세스 안에 들어 있으면서 메모리 리소스를 공유하게 되므로 효율적인 처리가 가능
  • 동시에 리소스를 접근할 경우 데드락(DeadLock) 발생

서비스 vs 쓰레드

-서비스

백그라운드 작업은 서비스로 실행하고 사용자에게는 알림 서비스를 이용해 알려줌
만약 메인 액티비티로 결과값을 전달하고 이를 이용해 다른 작업을 수행하고자 한다면 브로드캐스팅을 이용하거나 하여 결과값을 전달할 수 있음

-스레드

스레드는 동일 프로세스 내에 있기 때문에 작업 수행의 결과를 바로 처리할 수 있음
그러나 UI 객체는 직접 접근할 수 없으므로 핸들러(Handler) 객체를 사용함

쓰레드

  • 쓰레드는 new 연산자를 이용하여 객체를 생성한 후 start() 메소드를 호출하면 시작함
  • Thread 클래스에 정의된 생성자는 크게 파라미터가 없는 경우와 Runnable 객체를 파라미터로 가지는 두 가지로 구분함
running = true;

Thread thread1 = new BackgroundThread();
thread1.start();
  • 버튼을 누르면 value 변수에 들어있는 정수 타입의 값을 텍스트뷰에 보여줌
  • 쓰레드를 'BackgroundThread'라는 이름으로 정의
class BackgroundThread extends Thread {
   public void run() {
      while (running) {
         try {
            Thread.sleep(1000);
            value++;
         } catch (InterruptedException ex) {
            Log.e("SampleJavaThread", "Exception in thread.", ex);
         }
      }
   }
}

-메인 쓰레드

  • 애플리케이션 객체인 액티비티, 브로드캐스트 수신자 등과 새로 만들어지는 윈도우를 관리하기 위한 메시지 큐(Message Queue)를 실행함

-메시지 큐(Message Queue)

  • 순차적으로 코드를 수행함

-핸들러(Handler)

  • 메시지 큐를 이용해 메인 쓰레드에서 처리할 메시지를 전달하는 역할을 담당함
  • 특정 메시지가 미래의 어떤 시점에 실행되도록 스케줄링 할 수 있음

비동기 처리 쓰레드

-obtainMessage()

  • 호출의 결과로 메시지 객체를 리턴받게 함

-sendMessage()

  • 메시지 큐에 정보를 넣음

-handleMessage()

  • 메소드에 정의된 기능이 수행됨
  • 코드가 수행되는 위치는 새로 만든 쓰레드가 아닌 메인 쓰레드가 됨

-핸들러 클래스

  • 메시지 전송 방법 이외에 Runnable 객체를 실행시킬 수 있는 방법을 제공함

-Runnable 객체

  • 새로 만든 Runnable 객체를 핸들러의 post() 메소드를 이용해 전달해 주기만 하면 이 객체에 정의된 run() 메소드 내의 코드들은 메인 쓰레드에서 실행됨
profile
열심히 굴러가기 !

0개의 댓글