强制Async任务从主线程停止

时间:2014-01-23 20:18:52

标签: android multithreading android-asynctask

我有一个应用程序,它使用JSON定期(固定时间间隔,20秒)从服务器请求数据。

我当前的实现包括在异步任务中进行循环,具有20秒的“睡眠”状态。然而,这似乎不是一个好的实施。我的问题是有更好的实施。还有一种强制方法可以强制从主线程中停止异步任务。

另一个选择是更改代码,让客户端发送一个请求,让服务器让服务器循环回答。这是一个更好的实现,谢谢你提前:)

protected String doInBackground(String... args) {

            String RegistrartionID = RegisID();

            while (true){
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("Start_Term", args[0]));
                params.add(new BasicNameValuePair("Dest_Term", args[1]));
                params.add(new BasicNameValuePair("RegistrartionID",
                        RegistrartionID));
                Log.i("Start_Term", args[0]);
                Log.i("Dest_Term", args[1]);
                Log.i("RegistrartionID", RegistrartionID);
                JSONObject json = jsonParser.makeHttpRequest(
                        URL_SEND_CHOSEN_TERMINALS, "POST", params);

                try {
                    Thread.sleep(20000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

            return null;
        }

2 个答案:

答案 0 :(得分:0)

正如你所说,这不是一个好的实现。与流行的观点相反,AsyncTask不适用于长期/未确定的时间过程,它适用于短期任务,因此可以在之后退出并结束。

出于您的目的,我建议您使用Service。基本上是因为你有优势,你可以启动它并在你定义它的Activity中停止它。您可能会看到其文档herethis也可以提供帮助,这是一个非常好的例子。

答案 1 :(得分:0)

我建议您使用执行AsyncTask的服务并每20秒循环一次,您可以使用AlarmManager