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

asyncTask 가 종료되어야지만 다른 작업이 가능함...

0 추천
public class deleteAsyncTask extends AsyncTask<Uri,Void,Void> {

  @Override
  protected Void doInBackground(Uri... params) {
   // TODO Auto-generated method stub
   Uri contactUri = null;
   if(params!=null){
    for(Uri s:params){
     contactUri=s;
    }
     mContext.getContentResolver().delete(contactUri, null, null);
     
   }
   return null;
  }
 
 }

list.setOnItemLongClickListener(new OnItemLongClickListener() {

      @Override
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
        int arg2, long arg3) {

       Cursor c = (Cursor)list.getItemAtPosition(arg2);
       idIndex1=c.getString(SUMMARY_ID_COLUMN_INDEX);
       final Long idIndex=c.getLong(SUMMARY_ID_COLUMN_INDEX);
       final String lookupKey = c.getString(3);
       final deleteAsyncTask dl= new deleteAsyncTask();
       final CharSequence[] items = {"Delete"};
       AlertDialog.Builder item = new AlertDialog.Builder(mContext,AlertDialog.THEME_HOLO_LIGHT).setTitle(c.getString(1));
       item.setItems(items, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int item) {
            switch (item) {
            case 0: { 
             final Uri contactUri = Contacts.getLookupUri(
            idIndex, lookupKey);
         dl.execute(contactUri);
         adapter.swapCursor(tmpCursor(idIndex1));
         dialog.cancel();
           return; 
          }
            }
           }
       }).create();
       mPopupDlg=item.show();

디비데이터를 지우는것을 asyncTask 로 돌리면

 

디비작업이 백그라운드에서 실행되는거니까

다른 작업 할수있는거 아닌가요 ?

ListView 스크롤이나 다른버튼 누르거나 액티비티 이동등...

 

근데 어싱크테스크가 다돌때까지 아무작업을 못합니다.

왜그럴까요 ???

아무리 봐도 잘못한부분은 없어보이는데.. ㅠㅠ

미쳐버리겠네요.

related to an answer for: service 돌릴때 다른작업
now882002 (3,860 포인트) 님이 2015년 3월 4일 질문
프레그먼트에서 동작하고있습니다.

1개의 답변

+3 추천
 
채택된 답변
아까 답변 드렸는데 계속 올리시네요..

스레드와 별개로 SQLite 에서 delete 하는 중에는 lock 이 걸려 다른 곳에서

read 가 일어났을 시 block 현상이 생깁니다.

delete 하는 중에 read 하는 부분이 없는지 확인해보세요
mamondebaltob (32,750 포인트) 님이 2015년 3월 4일 답변
now882002님이 2015년 3월 4일 채택됨
아! 이제야 이해했습니다!!!
정말 감사합니다 ㅠㅠ
이전에는 cursoradapter를 써서 read가 한번 더 일어났었습니다.
그래서 arrayadapter로 변경했는데도 똑같네요...
ㅠㅠㅠㅠㅠ 왜그런지... ㅠㅠㅠ
...