2011-06-24 22 views
0

私はウェブからデータをダウンロードする1つのアクティビティを持っています。ダウンロードプロセスの途中で、プロセスを複数回ダウンロードするとアプリケーションが終了します。私はAsyncTaskを使用してデータとRunnableをダウンロードし、完了したステップを取得しています。ここに私のコードです。タスクの終了時にハンドラのコールバックを削除する必要がありますか?私がコールバックをポーズまたは削除メソッドに置くと、強制終了エラーが発生します。ここでプロセスの途中でアプリケーションがアンドロイドで終了しますか?

mBackgroundHandler = new Handler(); 
mRunnable = new Runnable() 
{ 
    public void run() 
    { 
     mCounterProgress = KamaApplication.getStep(); 
     Log.v(TAG, "Progress: " + mCounterProgress); 
     mRefreshProgress.setProgress(mCounterProgress); 
     mRefreshProgress.invalidate(); 

     if(KamaApplication.getTotalStep() == 100 && KamaApplication.getStep() == 99) 
     { 
      mStop = true; 
     } 

     if(!mStop) 
     { 
      mBackgroundHandler.postDelayed(this, 1000); 
     } 
    } 
}; 
mBackgroundHandler.postDelayed(mRunnable, 1000); 

は私のAsyncTask

private class DownloadFilesTask extends AsyncTask<Void, Integer, Void> 
{ 
    protected Void doInBackground(Void... params) 
    { 
     try 
     { 
      StepsGeneratorInputJsonData stepsGeneratorInputJsonData = new StepsGeneratorInputJsonData(); 
      stepsGeneratorInputJsonData.provider = "Android"; 
      stepsGeneratorInputJsonData.identification = "Vogue"; 
      stepsGeneratorInputJsonData.password = "abcd"; 
      mResult = createAndExecuteStepsGenerator(stepsGeneratorInputJsonData); 
      JSONObject mNewJSONObject = new JSONObject(mResult); 
      String mEndDate = mNewJSONObject.getString("endDate"); 
      if(mEndDate.equals("null")) 
      { 
       mRefreshSuccess = false; 
      } 
      else 
      { 
       mRefreshSuccess = true; 
      } 

     } 
     catch (Exception eException) 
     { 
      Log.v(TAG, "HotTestGettingError: " + eException.toString()); 
      mRefreshSuccess = false; 
     } 
     return null; 
    } 
    protected void onProgressUpdate(Integer... progress) 
    { } 
    protected void onPostExecute(Void result) 
    { 
     if(mRefreshSuccess) 
     { 
      insertData(); 
     } 
     else 
     { 
      Message mMessage = new Message(); 
      mMessage.what = 0; 
      mHandler.sendMessage(mMessage); 
     } 
     mBackgroundHandler.removeCallbacks(mRunnable); 
     updateDisplay(); 
    } 
} 

であると私はlogcatを見て、これだ:私は

<activity android:name=".Usage" android:screenOrientation="portrait" 
     android:clearTaskOnLaunch="true"> 

とも設定ファイルAndroidManifestに入れている

06-25 12:08:28.007: INFO/WindowManager(128): WIN DEATH: Window{408fc1d8 com.mygosoftware.kama/com.mygosoftware.kama.Usage paused=false} 
06-25 12:08:28.011: INFO/ActivityManager(128): Process com.mygosoftware.kama (pid 17691) has died. 
06-25 12:08:28.078: INFO/ActivityManager(128): Start proc com.sec.android.app.twlauncher for activity com.sec.android.app.twlauncher/.Launcher: pid=17817 uid=10015 gids={3003, 1015, 3002} 
06-25 12:08:28.078: INFO/ActivityManager(128): Low Memory: No more background processes. 
06-25 12:08:28.148: INFO/Zygote(17817): Zygote: pid 17817 has CALL PRIVILEGED permission, then set capability for CAP_SYS_ADMIN (21) 
06-25 12:08:28.312: INFO/ActivityThread(17817): Pub com.sec.android.app.twlauncher.settings: com.sec.android.app.twlauncher.LauncherProvider 
06-25 12:08:28.445: INFO/Launcher(17817): onCreate(): product model family:S1 product model : GT-I9000 

06-24 16:47:38.269: ERROR/InputDispatcher(128): channel '40823250 com.mygosoftware.kama/com.mygosoftware.kama.Usage (server)' ~ Consumer closed input channel or an error occurred. events=0x8 
06-24 16:47:38.269: ERROR/InputDispatcher(128): channel '40823250 com.mygosoftware.kama/com.mygosoftware.kama.Usage (server)' ~ Channel is unrecoverably broken and will be disposed! 
06-24 16:47:38.304: INFO/ActivityManager(128): Process com.mygosoftware.kama (pid 7637) has died. 

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

また、 onPause()メソッドを私の活動に入れてください。

また、私はこのリンクを参照しましたActivity restarts on Force Close。鉱山は非常に似た問題です。私は彼らが答えで書いたものすべてをやったが、まだエラーが出ている。

このエラーを削除するにはどうすればよいですか?

ありがとうございました。

答えて

0
private void startDownload() { 
     String url = GlobalVariable.Getstr(); 
     new DownloadFileAsync().execute(url); 

    } 
class DownloadFileAsync extends AsyncTask<String, String, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      showDialog(DIALOG_DOWNLOAD_PROGRESS); 
     } 

     @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DIALOG_DOWNLOAD_PROGRESS: 
      mProgressDialog = new ProgressDialog(this); 

//   mProgressDialog.setIcon(R.drawable.icon); 
      mProgressDialog.setIcon(R.drawable.tab_icon_pitchforkfm); 
      mProgressDialog.setTitle("Downloading file... " 
        + fileName.toString()); 

      mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      mProgressDialog.setCancelable(true); 
      mProgressDialog.show(); 
      return mProgressDialog; 
     default: 
      return null; 
     } 
    } 

    @Override 
     protected String doInBackground(String... arg0) { 

      int len1 = 0; 
      int count; 
      try { 
       URL url = new URL(GlobalVariable.Getstr()); 
       HttpURLConnection c = (HttpURLConnection) url.openConnection(); 
       c.setRequestMethod("GET"); 
       c.setDoOutput(true); 
       c.connect(); 
       int lenghtOfFile = c.getContentLength(); 
       Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile); 
       String PATH = Environment.getExternalStorageDirectory() 
         + "/download/"; 
       Log.v(LOG_TAG, "PATH: " + PATH); 
       File file = new File(PATH); 
       file.mkdirs(); 

       String fileName = "workTest.mp3"; 


       File outputFile = new File(file, fileName); 

       FileOutputStream fos = new FileOutputStream(outputFile); 

       InputStream is = c.getInputStream(); 

       byte[] buffer = new byte[1024]; 
       long total = 0; 

       while ((count = is.read(buffer)) != -1) { 
        total += count; 
        publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 
        // fos.write(buffer, 0, len1); 
        fos.write(buffer, 0, count); 
       } 
       fos.close(); 
       is.close(); 

      } catch (IOException e) { 
       Log.d(LOG_TAG, "Error: " + e); 
      } 
      return null; 
     } 

     protected void onProgressUpdate(String... progress) { 
      Log.d("ANDRO_ASYNC", progress[0]); 

      mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
     } 
     protected void onPostExecute(String unused) { 
      dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
      //refreshList(); 
      Toast.makeText(
        FindFilesByType.this, 
        "Downloading of " + fileName 
          + " complete.", Toast.LENGTH_LONG).show(); 
      try{ 
      refreshList(); 
      } catch (Exception e) { 
       Toast.makeText(FindFilesByType.this, "ERROR " + e.toString(), 
         Toast.LENGTH_LONG).show(); 
      } 

は、上記のコードは、ダウンロードがcompleted..hopeを持ってuponeによっても.. URLから指定されたmp3ファイルをダウンロードし、SDカードに保存し...、私にプログレスバーを示します。..私の全体のコードですこれはあなたのために役立ちます..まだまだ を取得し、私にハッピーコーディングを教えてください:) :) Pragna

+0

あなたはstartDownload()を使ってこのメソッドを呼び出す必要があります。 – Android

+0

こんにちはプラグラ、ダウンロードは私の問題ではありません。データは正常にダウンロードされますが、別のアカウントで起動するとアプリケーションがエラーなくプロセスの途中で終了しますが、logcatを見ると私の質問には入ります。ありがとう。 –

+0

こんにちはプラグラ、私はstartDownload()を使ったような別のメソッドでこのメソッドを呼び出しています。ありがとう。 –