android - 异步任务方法调用在 android 中非常慢

标签 android multithreading asynchronous android-asynctask

我有一个调用后台进程的异步任务方法。当我调用此 summaryCalc 方法时,preexecute 方法会在调用此方法时运行,但 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()

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

关于android - 异步任务方法调用在 android 中非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870689/

相关文章:

android - ionic 闪屏尺寸

java - 字符串数组到带有格式的字符串

c++ Win32 Api GetMessage 线程内关闭程序

iphone - 如何给MKMapView异步添加注解?

android - 如何通过用户输入动态填充 ExpandableListView?

android - 面临为特定 View 拍摄快照的问题

java - jstack:似乎不是 HotSpot VM(在远程进程中找不到符号 "gHotSpotVMTypes")

c++ - 不使用线程的c++ dll无限循环

java - 必须为元素类型 "xmlns"声明属性 "beans"

java - 如何在基于 REST 的 Web 服务中一次处理数千个请求?