2016-03-08 2 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

Вам не нужно передавать аргументы «null» в вашем методе выполнения, когда вы используете тип void –

+0

@vkislicins. оно работает!!!!! –

ответ

Смежные вопросы