【问题标题】:Different way of running a loop on AsyncTask java Android在 AsyncTask java Android 上运行循环的不同方式
【发布时间】:2015-10-26 16:28:06
【问题描述】:

所以我需要一个while循环来自动刷新布局上的文本,我终于找到了这样的方法(我只放了重要的部分,所以你明白了):

    public void restart() {
    GetRate asyncRate = new GetRate();
    asyncRate.execute();


}


private class GetRate extends AsyncTask<Void, Integer, String> {

    @Override
    protected String doInBackground(Void... params) {

        try {
            String p = urlfind();
            return p;
        }

        catch (IOException e) {
            return "0";
        }
    }

    @Override
    protected void onPostExecute(String p) {
        price_text.setText(p);
        restart();

    }

现在我的问题是,这是完成这项工作的好方法还是会导致问题?该应用程序似乎运行良好,目前我没有收到任何错误,如果有更好或更简单的方法可以做到这一点,请给出答案。谢谢

编辑:结果证明这是一个非常糟糕的主意,即使我添加了睡眠间隔,应用程序也会运行 15 分钟然后崩溃,所以我不建议任何人使用它。

【问题讨论】:

  • auto refresh不完整,你想要达到的可以理解。
  • 我不知道您的应用程序的要求是什么,但似乎您应该创建一个资源密集度较低的解决方案。
  • @UdiIdan 这是一个单独的活动而不是主要活动,urlfind() 方法使用 jsoup 从网站获取数据并返回我需要在 TextView 上更新的字符串
  • 这并不重要,因为您仍在使用移动设备的资源。至少您应该以固定的合理间隔执行“自动刷新”,而不是作为无限递归函数。
  • @UdiIdan 是的,我明白了,那怎么做?我可以为此使用 Thread.sleep() 方法还是会冻结 UI?

标签: java android loops android-activity android-asynctask


【解决方案1】:

可以使用AlarmManagerScheduledExecutorService 代替手动调用线程,以特定时间间隔或特定时间触发任务。

AlarmManager 一般用于大间隔,后一个用于短间隔。

使用这些类,您可以触发您的任务并更新您的 UI。

【讨论】:

  • 事实证明使用 AsynTask 是一个非常糟糕的主意,因为它最终会导致您的应用程序崩溃,我最终使用带有处理程序的 Thread 类,永远不会崩溃并且速度更快
  • 使用 ScheduledExecutorService,一定不能让你的应用崩溃。它非常完美和准确。 stackoverflow.com/questions/18605403/…
猜你喜欢
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多