본문 바로가기

PROGRAMING/Android

(26)
listView 항목에 Audio Albumart(thumbnail)을 지연 없이 나타내기 AsyncTask 호출 늦게 하기 AsyncTask를 상속 받아서 구현한 ThumbnailTask를 이용해서listView item 항목에 Thumbnail을 뿌려보았다. 하지만 빠른 스크롤시 bindView에서 item마다 ThumbnailTask를 생성한다면자원 효율이 나쁠것으로 예상 했다. 그래서 Thread.sleep(200) 를 Thread를 생성해서 주고 현재 현재 Item항목이 화면에 나타나는지 확인한 후 ThumbnailTask를 생성하도록 하였다.성능 향상이 되리라 생각된다. new Thread(new Runnable() {@Overridepublic void run() {LOG.d(CLASSNAME, "Runnable run");try {Thread.sleep(200);} catch (InterruptedExceptio..
listView 항목에 Audio Albumart(thumbnail)을 지연 없이 나타내기.AsyncTask ListView에 아래 그림과 같이 AlbumArt(thumbnail)을 표시하는데 빠른 스크롤시에도 지연 현상이 없도록 AsyncTask를 이용한다. 최초 반응성이 많이 늦어지만 AsyncTask를 사용하므로써 1차적으로 많이 개선되었다.(참고 자료 :http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/) Source class ViewHolder {public long albumId;public TextView tvTitle;public TextView tvArtist;public TextView tvDuration;public ImageView ivAlbumArt;}ViewHolder에 albumArt를 구분할수 있는 albumI..
Audio AlbumArt 가져오기. Audio AlbumArt의 Uri를 얻는다. 방법은 아래와 같다.audio data를 질의 하여 ALBUM_ID 컬럼의 데이터를 얻어와albumart Uri에 albumId값을 더해 albumart thumbnail 데이터를 얻어온다. Source long albumId = cursor.getLong(cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ALBUM_ID));Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");Uri sAlbumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId); Uri를 얻으면 ImageV..
android.content.CursorLoader 와 LoaderCallbacks 인터페이스 CursorLoader A loader that queries the ContentResolver and returns a Cursor. This class implements the Loader protocol in a standard way for querying cursors, building on AsyncTaskLoader to perform the cursor query on a background thread so that it does not block the application's UI. A CursorLoader must be built with the full information for the query to perform, either through the CursorLoader..
[widget]android.widget.CursorAdapter, ViewHolder pattern CursorAdapter : 데이터베이스의 data를 리스트에 바인딩 할때 사용한다.* CursorAdapter는 newView 의 View는 재 사용 한다.==>ArrayAdapter에서 getView에서 하는 View 재사용 하는 로직이 없다.ViewHolder pattern을 사용하여 bindView에서 findViewById 함수 사용을 줄인다. ListView listViewTmp = (ListView)findViewById(R.id.listView1);Cursor cursor = getMusicDataList();cursorAdapter = new CursorAdapter(this, cursor) {@Overridepublic View newView(Context context, Cursor ..
android.database.Cursor 와 ContentProvider[Uri] Cursor 객체 레코드의 집합. android.database.Cursor : This interface provides random read-write access to the result set returned by a database query. Cursor implementations are not required to be synchronized so code using a Cursor from multiple threads should perform its own synchronization when using the Cursor. ContentProvider 안드로이드 어플리케이션에서 어플리케이션간에 데이터를 공유할수 있는 기본적인 방법 android.content.ContentProvid..
[widget]android.widget.ListView [3] convertView 사용과 Holder Pattern getView를 사용하여 임의의 View를 구현할때 convertView 와 Holder pattern을 사용하면 성능을 향상 시킬 수 있다. 1. 안드로이드는 listview의 Item을 재활용하기 때문에 convertView가 null 인지 확인하는 구문을 넣으면반복적으로 inflate하는 로직을 줄일수 있어 성능을 향상 시킬 수 있다.class CustomArrayAdapter extends ArrayAdapter{public CustomArrayAdapter(Context context) {super(context,0);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHold..
[widget]android.widget.ListView [2] CustomArrayAdapter --getView ArrayAdapter를 상속 받은 CustomArrayAdapter를 구현getView 메소드를 Override하여 View를 임의로 구현함 activity_muisc_list.xml custom_list_item.xml Source @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_muisc_list);ListView listViewTmp = (ListView)findViewById(R.id.listView1);CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(..