자바 안드로이드 정리 - 1

백규현·2021년 10월 13일
0

자바안드로이드

목록 보기
1/2

이 시리즈는 오래된 자바 안드로이드 책의 내용을 정리하고 있습니다.
때문에 현 실정과 다른 부분이 있을 수 있습니다.

안드로이드 특징

  • 재사용이 가능한 애플리케이션 프레임워크
  • 최적화 된 달빅 가상 머신
  • WebKit 기반의 내장된 웹브라우저
  • OpenGL 2.0 지원하는 최적화된 그래픽
  • SQLite db 지원
  • 각종 오디오, 비디오 규격 지원
  • 블루투스,EDGE, 3G, WiFi 지원
  • 카메라, GPS, 나침판, 가속도계 지원
  • 풍부한 개발 환경 제공 장치

ART

  • 4.4에서 새로 배포되는 자바 가상 머신
  • 달빅,ART 중 하나를 선택할 수 있다.
  • Ahead-of-time 컴파일: 달빅은 필요할 때마다 앱을 컴파일 하여 앱을 실행한다. 하지만 ART는 미리 앱을 컴파일 한다.
  • 향상된 가비지 콜렉션
  • 디버깅 향상
  • 속도 : jni > art > dalvik

애플리케이션 실행 단계

  • .java 파일이 자바 컴파일러에 의해서 .class가 생성된다.
  • .class가 달빅 또는 art 위해서 돌아가기 위해 dex에 의해서 .dex가 생성된다.
  • .dex+ 여러가지 써드파티가 합쳐져서 .apk가 생성된다.

애플리케이션을 구성하는 4대 컴포넌트

액티비티

  • 사용자 인터페이스 화면을 가지는 하나의 작업
  • activity, thread, process가 1:1 관계는 아니다.

서비스

  • 백그라운드에서 실행되는 컴포넌트로서 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업

방송 수신자

  • 방송을 받고 반응하는 컴포넌트

콘텐트 제공자

  • 데이터를 관리하고 다른 애플리케이션에게 제공하는 컴포넌트 -> 안드로이드에서는 가능하다.

XML

  • 안드로이드에서는 UI 화면을 구성을 XML을 이용해 선언적으로 나타내는 방법을 선호한다.
  • 애플리케이션의 외관과 애플리케이션의 로직을 서로 분리 -> 유지보수 측면에서 유리하다.
  • 빠르게 UI를 구축
  • SGML의 부분 집합으로 웹 상에서 구조화된 텍스트 형식의 문서를 전송하고 수신하며 처리가 가능하도록 만든 마크업 언어
  • <activity> : 엑티비티 선언
  • <service> : 서비스 선언
  • <receiver> : 방송 수신자
  • provider> : 컨텐트 제공자

패키지

  • 클래스들을 보관하는 컨테이너
  • 일반적으로 인터넷의 도메인 이름을 역순으로 사용한다.

@Override

  • 어노테이션의 하나
  • 어노테이션은 컴파일러에게 추가적인 정보를 주는 것
  • @Override은 메소드가 부모 클래스의 메소드를 재정의 하였다는 것을 나타낸다.

onCreate()

  • 엑티비티 중에서는 onCreate()가 가장 먼저 실행 된다.
  • setContentView() 라는 함수는 액티비티의 화면을 설정하는 함수

리소스

  • 코드에서 리소스를 참조하는 방법 : 리소스가 추가되면, R.java안에 자동적으로 변수가 생성되고, 이를 통해서 해당 리소스를 참조할 수 있다.
  • 코드와 리소스를 분리하는 이유 : 안드로이드가 탑재된 장치들이 다양해지면서 언어나 화면 크기에 따라서, 리소스를 다르게 하는 것이 필요.

뷰와 뷰그룹

  • 뷰는 뷰그룹에서 들어가 있어야 한다.
  • 뷰그룹 : ViewGroup 클래스에서 상속받아서 작성된다. aka Layout
  • 뷰 : 컨트롤 또는 위젯이라고 한다. View 클래스를 상속받아서 작성된다.
  • px : 화면의 실제 픽셀을 나타낸다. 장치마다 화면의 밀도가 다르기 때문에 권장x
  • dp : 화면의 밀도가 160dpi 화면에서 하나의 물리적인 픽셀을 말한다. 화면의 밀도가 다르더라도 항상 동일한 크기로 표시된다.
  • 마진 : 부모와 나 / 패딩 : 나와 자식 (마패)

뷰를 선언할때 final을 꼭! 붙여야 하는이유

  • onCreate안에서 그냥 EditText eText; 이런식으로 선언하면 onCreate의 지역 변수로 선언되어 이벤트 처리 메소드안에서는 호출할 수 없다. 하지만 final을 붙이게 된다면 더 이상 변경할 수 없는 상수가 되므로 호출 할 수 있게 된다.

리스너 객체를 생성하는 방법

  • 리스너 클래스를 내부 클래스로 정의한다.
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button = findViewById(R.id.button);
        Listener lis = new Listener();
        button.setOnClickListener(lis);
    }
    class Listener implements View.OnClickListener {
        public void onClick(View v){
            Toast.makeText(getApplicationContext(),"Clicked!",Toast.LENGTH_LONG).show();
        }
    }
}
  • 리스너 클래스를 무명 클래스로 정의한다.
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),"Clicked!",Toast.LENGTH_LONG).show();
            }
        });
    }
}
  • 리스너 인터페이스를 액티비티 클래스에 구현한다.
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button button = findViewById(R.id.button);
        button.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        Toast.makeText(getApplicationContext(),"Clicked!",Toast.LENGTH_LONG).show();
    }
}

커스텀 컴포넌트

  • onTouchEvent안에 invalidate()가 들어가는이유 : View에서 onDraw()가 호출 된 이후, 화면은 갱신되지 않은채로 남아있게 된다. invalidate()는 해당 뷰 화면이 무효임을 안드로이드에게 알리고, onDraw()를 호출한다.
profile
반갑습니다.

0개의 댓글