Android 4.4 AsyncTask 개선점..

안드로이드에서 제일 많이 사용하는 쓰레드 형태가 AsyncTask를 상속하는 구조이고, AsyncTask의 개선은 바로 전체적인 성능개선으로 이어질 가능성이 높다.

AsyncTask의 최신(4.4 KitKat) 버전과 이전(4.3 Jelly Bean)을 비교해 보자.

위 그림에서 최신버전의 180, 181줄의 코드를 확인해 보면, 디바이스의 CPU의 개수에 따른 최적화가 눈에 띈다.

    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
    private static final int CORE_POOL_SIZE = CPU_COUNT + 1;

하지만, 기존의 코드에서는 아래의 코드로 하드코드되어 있어서 CPU가 2개인 디바이스에서는 오히려 성능을 저하시킬 수도 있다.

private static final int CORE_POOL_SIZE = 5;

위의 코드가 간단해 보일지 모르겠지만, 자바에서 Concurrent 쓰레드 프로그래밍에서는 매우 중요한 포인트이다. 이 작은 포인트가 디바이스에 최적화된 코드중의 일부라고 보면 되겠다.

Eclipse에서 Android ADT Extensions 사용하기..

이 플러그인은 안드로이드 프레임웍의 라이프사이클을 가지는 클래스의 템플릿 메서드를 생성해서, 안드로이드 개발에 도움을 준다. 플러그인 사이트인 https://marketplace.eclipse.org/content/android-adt-extentions 에서는 아래의 한 문장으로 정의하고 있다.

Quickly new Activity/Service/BroadcastReceiver/ContentProvider in Android Project with a wizard and configure in AndroidManifest.xml.

우선, 이 플러그인이 없는 상태에서의 Activity를 생성해 보자. 기존의 안드로이드 프로젝트에서 New -> Other… -> Android Activity 에서 Activity 클래스를 만들게 되면, 아래의 코드가 만들어 진다.

public class OldActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_old);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.old, menu);
		return true;
	}
}

이제 Android ADT Extensions을 Eclipse Marketplace에서 설치하고 Activity를 생성해 보자.

1. Android ADT Extensions 설치

2. Android Activity 클래스 만드는 화면

3. 생성된 코드

public class NewActivity extends Activity {
	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// TODO Auto-generated method stub

	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onStart()
	 */
	@Override
	public void onStart() {
		super.onStart();
		// TODO Auto-generated method stub
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onResume()
	 */
	@Override
	public void onResume() {
		super.onResume();
		// TODO Auto-generated method stub
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onPause()
	 */
	@Override
	public void onPause() {
		super.onPause();
		// TODO Auto-generated method stub
	}
}

이제, 약간 매번 onXXXX 시리즈의 매서드를 치지 않아도 되겠다. ^^

2013년을 보내며..

2013년이 이틀이나 지났다. 2013년의 마지막을 프로젝트의 마감으로 바쁘게 지나다 보니, 2013년을 보낸 뒤에서야 2013년에 대한 내용을 남길 수 있다.

1. 잘 지내다.

말 그대로 잘 지내고 있다. 이제 미국생활이 2년을 넘기면서 어느 정도 적응이 됐다. 특히 나보다 가족들이 더 적응을 잘하는 것 같다.

2. 새로운 프로젝트의 진행

2.1 MiiPC 프로젝트에 들어가는 서버와 클라이언트(Media Server & Client)를 배포하다.
– 이 프로젝트는 플랫폼을 만들어서 배포하기 위한 회사의 큰 프로젝트의 하나로 안드로이드 OS의 포팅과 포팅된 안드로이드 OS 위에서 동작하는 서비스 개발을 하고 있다.
2.2 우리나라의 S모 대기업과 프로젝트를 진행하고 있다.
– 자세한 내용을 기술할 수는 없지만, 좋은 카운터파트를 만나서 좋게 진행하는 프로젝트이다.

3. 회사생활에 대한 회의감

한때나마 회사생활에 대한 회의감이 강하게 들었다. 꼭 미국이라는 나라에서 직장을 다녀서라기보다는 외부요인이 커서였다. 직장을 다니면서 늘 느끼는 거지만 강한 동기부여가 제일 중요하지 않나 한다. 이 느낌을 계기로 영어공부를 열심히 해 보려고 한다.

4. 새로운 책의 번역 참여

대략 2014년 초에 출간될 책 일부를 번역했다. 느낌상 많이 팔리지는 않겠지만 읽는 독자들에게 도움이 되고, 쓰레기 번역이라는 평가는 안 받았으면 좋겠다.

5. 라스베가스 여행

올해는 여름에 휴가를 가지 못해서, 크리스마스 시즌에 라스베가스로 여행을 했다. 미국에서 살면서 큰 기쁨중에 하나가 여행인 것 같다.

올해에 대한 반성으로..

– 책을 너무 안 읽었다. 책 좀 읽어야 겠당..
– 하지 않는 운동에 대한 아쉬움..

작년의 회고를 다시 읽어보니 달라진 게 별로 없지만, 올해는 영어공부에 시간을 투자해야 겠다. 결론은 작년 회고와 동일하게, 실리콘 밸리는 개발자의 천국이 아니라, 노력한 만큼 능력이 되는 만큼 좋은 결과를 내는 기회의 땅임을 다시 한번 생각하며..
내년도 열심히 해 보자..