안녕하세요. 제임스 입니다. 


안드로이드 개발자 사이트를 뒤지다가 좋은 팁을 하나 발견하여 공유 하고자 합니다. 


Making ListView Scrolling Smooth 라는 제목의 개발 가이드 입니다. (원문은 아래 링크 참조)

https://developer.android.com/training/improving-layouts/smooth-scrolling.html


위 링크의 글을 간단히 요약하면...


ListView 스크롤을 부드럽게 유지하기 위한 핵심은 애플리케이션의 메인 스레드를 무거운 작업으로 부터 자유롭게 유지 하는 것입니다. 즉, 저장장치내 검색, 네트워크 통신 또는 SQL 사용등의 무건 작업은 별도의 스레드을 이용하는 것이 키 포인트 입니다. 


사실 특별히 새로운 부분은 아닙니다. 

하지만, 안드로이드 개발을 이제 시작 하시거나 아직 공부하고 계신 분들이라면 꼭 알고 넘어가야 하는 부분이죠. 


메인 스레드에서 하지 않으면 어떻게 사용하느냐??!

바로 background thread 를 이용하는 것입니다. 


위 오피셜 사이트에서 제공하고 있는 샘플 코드 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
    private ViewHolder v;
 
    @Override
    protected Bitmap doInBackground(ViewHolder... params) {
        v = params[0];
        return mFakeImageLoader.getImage();
    }
 
    @Override
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        if (v.position == position) {
            // If this item hasn't been recycled already, hide the
            // progress and set and show the image
            v.progress.setVisibility(View.GONE);
            v.icon.setVisibility(View.VISIBLE);
            v.icon.setImageBitmap(result);
        }
    }
}.execute(holder);
cs



이외 View Holder 를 이용하여 View 객체를 관리하는 것에 대한 언급도 있습니다. 


이와 관련 해서는 이후 ListView 를 다룰때 한번 정리 하도록 하겠습니다. 



 결론 


무건운 작업은 Main Thread 에서 하지 않고 Background Thread 에서 AsyncTask 를 이용하여 처리 한다 입니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

Android Development Guide




■ 안드로이드란 무엇인가? (What is Android?)

Android는 오프소스로 모바일(스마트폰등)과 태블릿 PC 등의 기기를 위한 Linux 기반 운영체제 입니다. Android는 리눅스 기반 운영체제 이나 응용 프로그램은 Java 를 사용 하여 작성 할 있도록 개발 하였으며 소프트웨어 개발키트 (SDK - Software Development Kit)를 통해 응용 프로그램을 개발하기 위해 필요한 각종 도구들과 API 를 제공하고 있습니다. 



■ 대상 (Target Audience)

앞으로 필자가 작성해 나갈 내용은 안드로이드 개발 초보자들을 위한 내용이며 중간중간 심화 과정도 포함할 예정입니다. 

이 가이드가 끝나는 시점에는 훌륭한 안드로이드 개발 기술을 보유한 상태일 것입니다. 

 


■ 전제조건 (Prerequisites)

안드로이드가 무엇인가라는 섹션에서도 언급했지만 안드로이드는 Java 프로그래밍 언어로 응요프로그램을 개발 할 수 있습니다. 즉, 기본적으로 Java 를 이해 하시고 계셔야 필자가 작성하는 개발 가이드를 이해 하고 따라 오실수 있으며, 더 재미있게 안드로이드 개발을 하실 수 있습니다. 






안녕하세요. 제임스 입니다. 


앞으로 장기간에 걸쳐 안드로이드 개발 가이드를 포스팅 하고자 합니다. 

이와 더불어 시간이 나면 다른 언어들도 하고 싶은 생각이 있지만 너무 의욕만 앞세우다 이도 저도 아닌 어정쩡한 상황이 될수 있겠죠? 

우선은 안드로이드 부터 시작 하겠습니다. 앞으로 잘 준비 해서 많은 분들이 안드로이드 개발에 입문 하고 나아가 좋은 앱을 개발 할 수 있는 초석이 될 수 있도록 좋은 글, 좋은 예제를 준비 하도록 하겠습니다. 


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안드로이드 앱 개발 중 꼭 한번 정도씩은 필요한 기능 중 한가지가 바로 내 폰이 부팅 되는 시점에 내가 만든 앱을 실행 시키는 것입니다. 


Android 앱의 Life Cycle 을 아시는 개발자라면 잘 아시겠지만 내가 만든 앱이 동작을 하기 위해서는 사용자가 직접 실행을 시켜 줘야만 합니다. 

하지만 경우에 따라서는 사용자 승인 하에 앱이 단 한번이라도 실행 되게 되면 그 이후에는 사용자가 신경 쓰지 않아도 단말이 재부팅 되더라도 실행 되어야 하는 경우가 있습니다. 


예를 들자면 헬스 보조 앱이나 알람 같은 경우가 있습니다.


이와 같은 경우를 위해 Android 폰 부팅 시 내가 만들 App을 실행 시키는 방법에 대한 내용을 정리 합니다. 



1. 우선 BroadcastReceiver 를 상속 받는 MyReceiver 클라스를 하나 생성하여 모바일 단말의 부팅이 완료된 경우의 액션을 정의 합니다. 


여기서 android.intent.action.BOOT_COMPLETED 메세지는 모바일 단말의 부팅이 완료 되었다는 메세지 이며 이 메세지를 받았을 경우 MainActivity 를 실행 시켜 주는 기능을 합니다. 


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("android.intent.action.BOOT_COMPLETED")){
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}

}


2. AndroidManifest.xml 에 RECEIVE_BOOT_COMPLETED 권한을 추가 합니다.

 receiver 에는 생성한 클라스명인 MyReceiver 를 등록 하고, intent-filter 에 우리가 사용할 BOOT_COMPLETED 메세지를 추가 해줍니다. 

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>


3. MainActivity 클라스에 본인이 원하는 동작을 구현하고 앱을 빌드하면 개발 완료입니다. 



이제 앱을 실행 하면 리시버가 등록이 되고 앱을 종료 하더라도 단말이 재부팅 되면 broadcast receiver 가 BOOT_COMPLETED 메세지를 받아 내 app 의 MainActivity 를 실행 하게 되면 정의한 동작을 수행하게 됩니다. 



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,