본문 바로가기
[Developer]/Android

안드로이드 교육 4일차 오후

by 해피빈이 2009. 12. 10.

 안드로이드 폰 내에서 상단에 Notification을 띄울 수 있다.

그것은 프로그램 내에 Thread를 생성해서 처리하면 되는 것이다.

 

ⓐ 구현하는 방법 1

-정의하는 코드

class MyThread extends Thread {

public void run() {

// 독립적으로 수행할 코드 즉, Thread가 할 일(thread는 아니다)

}

}

 

-실행하는 코드

MyThread t = new MyThread();

t.start(); // 이 때 run을 실행하면 그냥 run만 실행되고 끝난다. 따라서 start()로 해야 새롭게 thread가 생성이 된다.

 

ⓑ 구현하는 방법 2

만약 extends한 것이 이미 있어서, Thread를 extends할 수 없는 상황에서는

~~ implements Runnable  해서 처리하면 된다. run()을 구현하는 것이다.

그렇게 하면 선언시 방법이 살짝 달라진다.

Runnable r = new MyThread();

Thread t = new Thread(r);

t.start(); // 이하는 동일하다.

 

 

*tip 숫자를 기입할 때 자바는 가독성이 매우 중요하기 때문에

sleep(5000) 보다는 sleep(5 * 1000)이 더 낫다. 1000의 의미를 알 수 있다. 어차피 Compile Time에 연산이 되기 때문에 Runtime에는 전혀 영향을 안끼친다.

 

 Binder를 이용하면 Process와 Process간의 통신이 가능하다.(특정 서비스를 구현하여 여러 android application에게 제공하고자 하기 위해)

 

IDL :  Interface Definition Language

언어 중립 언어이다. 언어간의 통신을 위해 OMG라는 단체에서 만들었다.

 

최근엔 언어가 XML로 메소드와 관련한 데이터 내용들을 전달하고 해석을 하는 편이다.

 

프로젝트 안에 AIDL로 적당한 이름의 interface를 만들고 xxxx.aidl 로 파일을 저장하면

R.java파일같이 Xxxx.java 파일이 generate된다.

 

interface를 overriding할 때는 public을 꼭 붙여야 한다. 공개할 목적으로 interface를 정의한 것이기 때문이다.

 

JNI(Java Native Interface) -> Native : 자바입장에서는 C/C++을 뜻한다.

NDK라고 해서 C나 C++로 구현된 코드를 안드로이드 플랫폼으로 포팅이 가능하게 한다.

그렇다고 모든 코드를 C나 C++로 만들기 위해 제공된 것은 아니고, 자바에서 접근이 난해한 Device 레벨의 개발을 할 수 있도록 돕게 하기 위해 제공된다.

아직 NDK는 버전이 1.6밖에 없어서, 개발을 용이하게 하려면 SDK도 1.6을 쓰는게 좋다. 개발 완료 후에는 2.0.1로 업데이트 시켜도 된다.

 

Cygwin 설치 후 NDK를 home directory에 설치.

 

JNI로 C에서 Java에 있는 변수나 메소드를 가져올 때! 예제들.

-변수 : jfieldID id_a=(*env)->GetFieldID(env,cls,"i","I");

-메소드 : jmethodID mid = (*env)->GetMethodID(env,cls, "callMe", "(I)I");

-클래스 : jclass cls =(*env)->GetObjectClass(env,this);

 

Performance를 위한 Topic들

  •  Avoid Creating Objects : 되도록이면 짧은시간동안 사용되는 객체 생성은 피하자. 또한 이 것에 연관해서 String으로 문자수정보단, StringBuilder를 활용하자.
  • Use Native Methods : 사소한 연산에서는 Native method를 사용하지 마라. indexOf()나 lastIndexOf()와 같은 애들이 loop보다 더 빠르다.
  • Prefer Virtual Over Interface : Map같은 경우에 Map같은 interface로 객체 생성하는 것보다, HashMap으로 준비된 클래스를 사용하면 더 뛰어나다.
  • ...

이 글은 스프링노트에서 작성되었습니다.

반응형

댓글