2016-03-08 114 views
1

我有一個異步任務方法,它調用後臺進程。當我調用此summaryCalc方法時,preexecute方法在此方法調用時運行,但doInBackground方法需要超過20秒才能啓動。這需要很長時間。有沒有其他方法來提高調用doInBackground方法或任何其他最快的方式來執行線程的速度?謝謝。異步任務方法調用非常慢在android

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_summary_date_select); 
    btnSearch = (Button) findViewById(R.id.btnSearch); 

    btnSearch.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       summaryCalc();     
     } 
    }); 
} 
/** 
* method to create asynchronous task to realign summary data 
*/ 
public void summaryCalc() { 
    new AsyncTask<Void, Void, String>() { 
     ProgressDialog dialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      dialog = new ProgressDialog(SummaryDateSelectActivity.this); 
      dialog.setTitle(getResources().getString(R.string.app_name)); 
      dialog.setMessage(getResources().getString(R.string.please_wait)); 
      dialog.setCanceledOnTouchOutside(false); 
      dialog.show(); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      ExtraSettingsDS settingsDS = new ExtraSettingsDS(getApplicationContext()); 
      ExtraSettingsDO settingsDO = settingsDS.getExtraSettingsValues(); 
      WeeklySummaryRecovery summaryRecovery = new WeeklySummaryRecovery(getApplicationContext()); 
      /*Insert missing account order data*/ 
      summaryRecovery.insertMissingAccOrderData(); 

      if (settingsDO.getAccManage() == 0) { 
       summaryRecovery.summaryInsertForSeparateAccManage(); 
      } else { 
       summaryRecovery.summaryInsertForJoinAccManage(); 
      } 
      settingsDS.updateWeeklyFinishedDate(); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      dialog.dismiss(); 
      intent = new Intent(getApplicationContext(), SummaryDetailsShowActivity.class); 
      intent.putExtra(KandhaConstants.IE_NEXT_ACTIVITY, accCheck); 
      intent.putExtra(KandhaConstants.IE_DAY_OF_LINE, currentDay); 
      intent.putExtra(KandhaConstants.IE_START_DATE, date); 
      startActivity(intent); 
      finish(); 
     } 

    }.execute(null, null, null); 
} 
+2

有可能你有很多異步任務正在運行。調用'.execute()'會逐個執行它們。嘗試調用'.executeOnExecutor()'來代替。 http://developer.android.com/reference/android/os/AsyncTask.html – vkislicins

+1

當您使用void類型 –

+0

@vkislicins時,您不需要在執行方法中傳遞null參數。有用!!!!! –

回答