2011-12-10 7 views
0

Android 2.2エミュレータで動作するEclipse + SDK 8を使用してAndroidアプリを作成しています。AndroidアプリがVMをスローアウトAsyncTask内で打ち切る

長いタスクをバックグラウンドで処理するAsyncTaskを作成します。現在の活動であろう力がアクティビティを起動ツールに戻って閉じて、mListは(1000+アイテム)大きい場合:

public class taskSavingFavourite extends AsyncTask<Void, Void, Integer> 
{  
    @Override 
    protected Integer doInBackground(Void... arg0) 
    { 
     List<MainListClass> mList = new ArrayList<MainListClass>(); 
     String s = null; 
     int addedCount= 0; 

     if (mainListSubTabSelectedTab == 0) mList = buildingList; 
     else mList = storeList; 
     if (mList == null) return 0; 
     try 
     { 
      for (int i = 0; i < mList.size(); i ++) 
      { 
       if (mList.get(i).checked == 1) 
       { 
        s = htFavourite.get(mList.get(i).id+"-"+mList.get(i).type); 
        if (s == null) 
        { 
         addedCount ++; 
         if (!favouriteList.equals("")) 
          favouriteList = favouriteList + ";"; 
         favouriteList = favouriteList + 
             mList.get(i).id + "-" + mList.get(i).type + ":" + 
             mList.get(i).name; 
         htFavourite.put(mList.get(i).id + "-" + mList.get(i).type, 
             mList.get(i).name); 
         mList.get(i).favourite = 1; 
        } 
       } 
       publishProgress(); 
      } 
      if (addedCount != 0) 
      { 
       SharedPreferences settings = getSharedPreferences("MGS_PRIVATE_DATA", 0); 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putString("favouriteList", favouriteList); 
       //Commit the edits! 
       editor.commit(); 
      } 
     } 
     catch (Exception e) {}; 
     return addedCount; 
    } 
} 

問題がある:以下のコードです。私は迷惑な "残念ながら..."ダイアログが出てこないので、クラッシュしていないことを確認しています。

私はlogcatをチェックし、それが起こるとき、それは常にこのメッセージを持っている:

12-10 14:10:28.772: D/dalvikvm(976): threadid=9: sending two SIGSTKFLTs to threadid=2 (tid=977) to cause debuggerd dump 
12-10 14:10:30.842: D/dalvikvm(976): Sent, pausing to let debuggerd run 
12-10 14:10:38.903: D/dalvikvm(976): Continuing 12-10 14:10:38.903: E/dalvikvm(976): **VM aborting*** 

は、私は、これはアンドロイドのバグであるか、私は何かを逃していますかどうかを確認していません。

答えて

0

申し訳ありませんが、私は理由を発見したと思う:内部にタイトなループを使用しないでくださいAsyncTask:DoinBackground

だから、Thread.Sleep(1)をループの中に入れてみると、すべてが魅力的です。たぶんこれは実際のデバイスではなく、エミュレータで発生します(私はちょうど推測します)。

関連する問題