【问题标题】:Improve Activity starting time (AsyncTask?)改善 Activity 启动时间(AsyncTask?)
【发布时间】:2012-07-24 00:44:46
【问题描述】:

我有一个带有 ViewPager 和一些片段的 Activity。

问题:启动活动需要很长时间,因为 ViewPager 是在 onResume 方法中创建的。 2-3 秒,因为数据库请求。

我想我可以在 onResume 中启动一个 AsyncTask 并在那里完成繁重的工作。但是启动 Activity 的时间并没有减少。

如果我在视图中放置一个按钮并在 onClick 中完成工作,一切正常。 Activity 启动速度非常快,点击后开始繁重的工作。

需要考虑的一些代码:

AsyncTask 实现

private class LoadTask extends AsyncTask<Void, Integer, Boolean>{

        @Override
        protected Boolean doInBackground(Void... params) {
            PageAdapter mPageAdapter = new PageAdapter(
                    getSupportFragmentManager(), mFragments);
            mViewPager.setAdapter(mPageAdapter);

            return true;
        }

    }

任务在 onResume 中被调用

@Override
    protected void onResume() {
        super.onResume();

        LoadTask task = new LoadTask();
        task.execute();
    }

此解决方案不会改善活动的开始时间。

有没有办法启动 Activity 并在充气和显示所有内容(进度条...)后完成繁重的任务?

【问题讨论】:

    标签: android multithreading android-asynctask android-viewpager


    【解决方案1】:

    您需要做的是在创建活动时设置 empty 视图分页器并将其链接到适配器。然后,将内容填充到异步任务中支持适配器的任何集合中,并通知视图数据集已更改。视图在创建之前无法显示,并且您已将适配器的注册移至异步任务,因此您不会注意到差异。目标是让您的应用在启动时显示一些视图,并在数据可用时简单地填写数据(您可能知道)。

    【讨论】:

    • ViewPager 一开始是空的。它是在 XML 中创建的。但我看不到它。 ViewPager 通过设置 PageAdapter 来填充内容。这在 asynctask 中异步发生。但是在 asynctask 结束后会显示整个活动。我不清楚为什么在 asyncTask 执行操作时没有绘制 Activity。
    • 所以您是说如果您完全注释掉异步任务,它会按预期工作(快速加载)减去使用合法数据填充的寻呼机?那么我们可能需要更多的代码。另外,您尝试加载多少数据以及您正在测试的系统的规格是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多