从 AsyncTaskLoader 更新进度条?

2024-03-27

使用 AsyncTaskLoader 时,如何更新显示更新状态的进度条?通常,您会等待回调完成后删除,但是如何进行运行更新呢? 您会让主线程(ui)在设置数据时轮询数据吗?

编辑:我正在谈论异步任务加载器,看loader部分。这是课程链接:http://developer.android.com/reference/android/content/AsyncTaskLoader.html http://developer.android.com/reference/android/content/AsyncTaskLoader.html

我想使用它,因为它是未来:),我知道如何使用 AsyncTask 来做到这一点。


您可以使用加载器来做到这一点,但您需要保留并更新 Activity 上的 WeakReference :

public class LoaderTestActivity extends FragmentActivity implements LoaderCallbacks<Void> {
    private static final int MAX_COUNT = 100;

    private ProgressBar progressBar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_async_task_test);

        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar.setMax(MAX_COUNT);
        AsyncTaskCounter.mActivity = new WeakReference<LoaderTestActivity>(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_async_task_test, menu);
        return true;
    }

    public void onStartButtonClick(View v) {
        startWork();
    }

    void startWork() {
        getSupportLoaderManager().initLoader(0, (Bundle) null, this);
    }

    static class AsyncTaskCounter extends AsyncTaskLoader<Void> {
        static WeakReference<LoaderTestActivity> mActivity;

        AsyncTaskCounter(LoaderTestActivity activity) {
            super(activity);
            mActivity = new WeakReference<LoaderTestActivity>(activity);
        }

        private static final int SLEEP_TIME = 200;

        @Override
        public Void loadInBackground() {
            for (int i = 0; i < MAX_COUNT; i++) {
                try {
                    Thread.sleep(SLEEP_TIME);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                Log.d(getClass().getSimpleName(), "Progress value is " + i);
                Log.d(getClass().getSimpleName(), "getActivity is " + getContext());
                Log.d(getClass().getSimpleName(), "this is " + this);

                final int progress = i;
                if (mActivity.get() != null) {
                    mActivity.get().runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            mActivity.get().progressBar.setProgress(progress);
                        }
                    });
                }
            }
            return null;
        }

    }

    @Override
    public Loader<Void> onCreateLoader(int id, Bundle args) {
        AsyncTaskLoader<Void> asyncTaskLoader = new AsyncTaskCounter(this);
        asyncTaskLoader.forceLoad();
        return asyncTaskLoader;
    }

    @Override
    public void onLoadFinished(Loader<Void> arg0, Void arg1) {

    }

    @Override
    public void onLoaderReset(Loader<Void> arg0) {

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 AsyncTaskLoader 更新进度条? 的相关文章

随机推荐

  • Facebook 页面插件仅显示链接而不显示页面

    我的 facebook 页面插件只是向我显示一个链接而不是页面 我尝试将 http https 添加到 js src 但没有任何效果 我也在本地以及托管服务器上尝试过 但给了我相同的结果 div class fb page blockquo
  • PRIME ng 确认服务的 Angular 单元测试

    首先 我是角度单元测试的新手 我想对以下从数据中删除记录的方法进行单元测试 方法是 Confirm Button for deletion confirm name string id any this confirmationServic
  • 使用 sourcetree 将推送恢复到远程

    我不小心将一个功能分支推送到了远程主控 现在我想将 master 恢复到之前的提交 当我选择 将当前分支恢复到此提交 时 仅恢复本地分支 并且由于远程主分支领先 55 意外推送 我无法将刚刚恢复的本地主分支推送到远程 当在 SO 和 Goo
  • 将 data.frame 转换为 ff

    我想将 data frame 转换为 ff 对象 并使用 as ffdf 进行描述here https stackoverflow com questions 15787221 how can i apply ffdf to non ato
  • 如何将绘图线颜色从蓝色更改为黑色

    当我生成一组数据并尝试在 python 中为绘图线着色时 我陷入了困境 例如 我想在这里将线条颜色从蓝色更改为黑色 这就是我所拥有的 返回的是我从 pandas 获得的数据集 ax plt gca ax set axis bgcolor c
  • TCP打孔(NAT穿越)库什么的?

    我想用 C 进行 TCP 打洞 NAT 穿越 如果需要 可以使用集合服务器来完成 我发现http sharpstunt codeplex com http sharpstunt codeplex com 但无法让它发挥作用 理想情况下 我需
  • iOS 景观左、右、错

    TL DR iOS 文档不同意Info plist关于哪个方向 横向左与右 的主页按钮位于哪一侧 我错过了什么吗 例如 代码的方向有区别thinks它所在的位置以及设备的方向knows它在 请参阅下面标记为 的倒数第二个要点 该文档用于UI
  • SELECT 语句中的列别名不适用于 SQuirrel SQL + Firebird

    我尝试使用 SQuirrel SQL 3 4 Firebird 1 5 Driver JDBC Jaybird 2 2 0 1 JVM 1 7 0 03 在 SELECT 语句中添加列别名 但不起作用 别名列与列的原始名称一起出现 在另一个
  • Collectors.toSet() 和 HashSet

    采取以下示例代码行 Set
  • Spring AMQP Java 客户端中的队列大小

    我使用 Spring amqp 1 1 版本作为我的 java 客户端 我有一个大约有 2000 条消息的队列 我想要一个服务来检查这个队列大小 如果它是空的 它会发出一条消息说 所有项目已处理 我不知道如何获取当前队列大小 请帮忙 我用谷
  • 以编程方式(无需 XML)为 Android 视图设置属性(边距、重力等)

    我需要在 java 活动类中创建一个 GUI 布局 视图 我知道使用 xml 布局文件更加灵活且更容易 但我现在不想使用它 我找不到任何 setGravity 但我不知道如何使用 Gravity 对象 或 View 对象的任何 setset
  • C11内存模型——两个线程执行atomic_fetch_add,然后执行atomic_load——可能输出什么?

    考虑以下测试程序 该程序在完全实现 C2011 原子和线程的实现上编译和运行 include
  • $this->db->insert_id();每次在 codeigniter 中返回 0 [重复]

    这个问题在这里已经有答案了 我正在使用 codeigniter 并一次插入一条记录 但问题是 this gt db gt insert id 每次都返回 0 但是记录已成功创建 我无法弄清楚 这是常见情况还是我犯了一些愚蠢的错误 我使用 e
  • C++ Visual Studio“非标准语法;使用‘&’创建指向成员的指针”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我多次遇到此错误 错误 C3867 非标准语法 使用 创建指向成员的指针 我知道这个问题已被问过很多次 但我不明白为什么会出现问题
  • 如何卸载隐藏/不活动的 jquery ui 选项卡?

    我在我的 asp net mvc Web 应用程序中使用 Jquery UI 选项卡 我总共有 6 个选项卡 每个选项卡都包含一个用户控件 我使用 ajax 将内容动态加载到每个选项卡中 如下所示 div align center ul l
  • 什么是“一流”对象?

    在给定的编程语言中 什么时候对象或其他东西被称为 一流 为什么 它们与非它们的语言有何不同 当人们说 一切都是对象 就像在 Python 中 时 他们真的意味着 一切都是一流的 吗 简而言之 这意味着该对象的使用没有任何限制 它是一样的 任
  • zsh 更改提示输入颜色

    我想更改 zsh 中输入文本的颜色 我为每个命令键入的文本 示例 在user host gt ls 我想要ls 为黄色以从标准输出中脱颖而出 我知道我可以完成这个bash using export PS1 BIGreen u h w IYe
  • 以编程方式删除 AppWidget

    我最难弄清楚如何以编程方式删除主屏幕 AppWidget 即无需用户实际将其拖入垃圾箱 举个例子 考虑一个可以有多个帐户的应用程序 每个帐户有任意数量的小部件 一旦删除帐户 小部件也应该被删除 我尝试过遵循一个不起眼的例子http www
  • 自动对焦仅适用于页面刷新

    我有一个弹出窗口中的表单 我设置了自动对焦属性autofocus autofocus 但当表单加载时它不会聚焦 但是如果刷新页面它会聚焦 该表格被插入到div 表格样本 First Name
  • 从 AsyncTaskLoader 更新进度条?

    使用 AsyncTaskLoader 时 如何更新显示更新状态的进度条 通常 您会等待回调完成后删除 但是如何进行运行更新呢 您会让主线程 ui 在设置数据时轮询数据吗 编辑 我正在谈论异步任务加载器 看loader部分 这是课程链接 ht