如何反复运行AsyncTask?

时间:2012-04-25 23:02:01

标签: java android android-asynctask

我有一个运行下面代码的onCreate方法。简而言之,代码从服务器检索数据并在屏幕上显示消息传递程序。它只执行一次,但我希望它每3秒运行一次AsyncTask(尝试模拟聊天)。我很确定这不是开始使用聊天系统的方法,但是我只需要一些现在可用的东西(作为概念证明),我将专注于以后实现它的正确方法。

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

        final Functions function = new Functions();
        final SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());
        whatroom = prefs.getString("chat", "null");

        new AsyncTask<String, Void, String>() {
            @Override
            protected String doInBackground(String... args) {
                return function.getInbox(args[0]);
            }

            @Override
            protected void onPostExecute(String result) {
                TextView inbox = (TextView) findViewById(R.id.inbox);
                ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar1);
                progressBar.setVisibility(View.GONE);
                inbox.setText(result);
            }

        }.execute(whatroom);
    }

我尝试在asynctask周围添加一个简单的while语句,但它只是强制关闭。

2 个答案:

答案 0 :(得分:2)

您无法重复使用AsyncTask实例。您需要在每次循环时创建新实例。

答案 1 :(得分:0)

如果没有其他信息,很难给出具体的答案。但是,请考虑使用Loader,使用Service等来抽象所有内容

关于Loaders

  
      
  • 每个活动和片段都可以使用它们。
  •   
  • 他们提供异步数据加载。
  •   
  • 他们会监控数据来源,并在内容发生变化时提供新结果。
  •   
  • 在配置更改后重新创建时,它们会自动重新连接到上一个加载程序的游标。因此,他们不需要重新查询他们的数据。
  •