【问题标题】:Asynchronous Task Method Calling is Very Slow in androidandroid中的异步任务方法调用非常慢
【发布时间】:2016-03-08 14:57:05
【问题描述】:

我有一个异步任务方法,它调用后台进程。当我调用此 summaryCalc 方法时,预执行方法会在此方法调用时运行,但 doInBackground 方法需要超过 20 秒才能启动。这需要很长时间。有没有其他方法可以提高调用 doInBackground 方法的速度或任何其他最快的执行线程的方法?谢谢。

 @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);
}

【问题讨论】:

  • 您可能有很多异步任务正在运行。调用.execute() 会一一执行。请尝试致电 .executeOnExecutor()developer.android.com/reference/android/os/AsyncTask.html
  • 当你使用 void 类型时,你不需要在你的执行方法中传递null 参数
  • @vkislicins 谢谢。它有效!!!!
  • @chellapandik 很酷,很高兴我能提供帮助。我会把它作为答案发布。

标签: android multithreading asynchronous android-asynctask


【解决方案1】:

您可能有很多异步任务正在运行。调用.execute() 会一一执行。请尝试致电 .executeOnExecutor()

http://developer.android.com/reference/android/os/AsyncTask.html

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2012-10-26
    • 1970-01-01
    • 2019-01-22
    • 2016-10-13
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多