마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

프로그래스 다이얼로그 질문입니다.

0 추천
private long findThumbList(String str) {
		long returnValue = 0;
		mThumbImageInfoList = new ArrayList<ThumbImageInfo>();
		// Select 하고자 하는 컬럼
		String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
		String qq = "substr(" + MediaStore.Images.Media.DATA + ",1," + str.length() + ") = '" + str + "'";
		// 쿼리 수행
		Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, qq, null, MediaStore.Images.Media.DATE_ADDED + " desc");

		if (imageCursor != null && imageCursor.getCount() > 0) {
			// 컬럼 인덱스
			int imageIDCol = imageCursor.getColumnIndex(MediaStore.Images.Media._ID);
			int imageDataCol = imageCursor.getColumnIndex(MediaStore.Images.Media.DATA);

			// 커서에서 이미지의 ID와 경로명을 가져와서 ThumbImageInfo 모델 클래스를 생성해서
			// 리스트에 더해준다.
			while (imageCursor.moveToNext()) {
				ThumbImageInfo thumbInfo = new ThumbImageInfo();
				if (str.equals(new File(imageCursor.getString(imageDataCol)).getParent())) {
					thumbInfo.setId(imageCursor.getString(imageIDCol));
					thumbInfo.setData(imageCursor.getString(imageDataCol));
					thumbInfo.setCheckedState(false);

					mThumbImageInfoList.add(thumbInfo);
					returnValue++;
				}
			}
		}
		imageCursor.close();
		return returnValue;
	}

 

 

 

위 메서드를 실행을 쓰레드,어신크테스크 둘다 돌려보는데
프로그래스 다이얼로그를 돌려도 실행은 되는데 프로그래스 기본에 돌아가는 애니메이션이 돌지않고
그대로 멈춰있다가 메서드가 끝나면서 프로그래스바가 종료됩니다.
종료되는 이유는 메서드가 끝났을때 이벤트처리가 있기때문인데요 ㅠㅠ
 
private class DoFindImageList extends AsyncTask<String, Integer, Long> {
		@Override
		protected void onPreExecute() {
			mLoagindDialog = ProgressDialog.show(Main.this, null, "로딩중...", true, true);
			super.onPreExecute();
		}

		@Override
		protected Long doInBackground(String... arg0) {
			long returnValue = 0;
			if (isCheck) {
				returnValue = findThumbList();
			} else {
				returnValue = findThumbList(arg0[0]);
			}
			return returnValue;
		}

		@Override
		protected void onPostExecute(Long result) {
			if (isCheck) {
				list.setAdapter(new AdapterList());
				include.setVisibility(View.GONE);
				list.setVisibility(View.VISIBLE);
			} else {
				include_grid.viewControl(include, mThumbImageInfoList);
				include.setVisibility(View.VISIBLE);
				list.setVisibility(View.GONE);
			}
			mLoagindDialog.dismiss();
		}

		@Override
		protected void onCancelled() {
			super.onCancelled();
		}
	}

 

 

이런식으로 어신크테스크나
 
 
Thread t = new Thread(new Runnable() {

		@Override
		public void run() {
			// TODO Auto-generated method stub
			h.post(new Runnable() {

				@Override
				public void run() {
					// TODO Auto-generated method stub
					mLoagindDialog = ProgressDialog.show(Main.this, null, "로딩중...", true, true);
				}
			});
			String str = new File(bb.get(arg2)).getParent();
			findThumbList(str);
			h.post(new Runnable() {

				@Override
				public void run() {
					// TODO Auto-generated method stub
					if (isCheck) {
						list.setAdapter(new AdapterList());
						include.setVisibility(View.GONE);
						list.setVisibility(View.VISIBLE);
					} else {
						include_grid.viewControl(include, mThumbImageInfoList);
						include.setVisibility(View.VISIBLE);
						list.setVisibility(View.GONE);
					}
					mLoagindDialog.dismiss();
				}
			});
		}
	});

 

 

이런식으로 쓰레드를 돌려도 마찬가지입니다 ㅠㅠ
메서드의 while문 돌면서 프로그래스가 메모리렉으로인해 멈춘듯한데 ..
메서드가아닌 어신크테스크나 쓰레드 자체에서 소스를 돌려도 마찬가지구요
 
어신크테스크나 쓰레드를 이용해서 하면 문제없이 받아올꺼라고 생각을했는데 ...
이런문제가생겨 난처하네요 ㅠㅠ
답변 부탁드립니다 ㅠㅠ
이걸 하루종일 잡고있습니다 ㅠㅠ 

 

정에약한마음 (1,160 포인트) 님이 2013년 12월 16일 질문

1개의 답변

0 추천
Progressbar 이거 한번쓰고 리사이클 해줘야하는데...

예전 버전에서는 하는 방법을 몰라서 그냥 다이얼로그를 띄우거나 할때 매번 새로 생성했었습니당.

최근 버전에서는 잘 모르겟네용.
카라드레스 (2,910 포인트) 님이 2013년 12월 17일 답변
...