Android - 使用无限循环从Asynctask调用Asynctask

时间:2013-09-23 12:34:17

标签: android android-asynctask infinite-loop

我有2个Asynctask,1个用于从服务器获取数据(位置),然后在地图上设置一个带有此位置的标记,另一个调用第一个Asyntask在循环中用于更新位置。 这是我的代码:

public class AsynComp extends AsyncTask<Void, Void, Void> {
    ProgressDialog taxiDialog;

    @Override
    protected Void doInBackground(Void... params) {
        jsonComp = new JSONComp(find_url);
        find_status = jsonComp.getJsonStatus(txt_search);
        return null;
    } 

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);

        if (find_status.equals("2013")) {
            Toast.makeText(getBaseContext(), "no result",
                    Toast.LENGTH_SHORT).show();

        } else if (find_status.equals("2012")) {
            for (Marker marker:markers){
                if(marker.getTitle().equals(compFollow)){
                    marker.remove();
                }
            }
            for (int i=0; i<number;i++){
                comp = new Comp(jsonComp.getJsondata(i));
                SetMarkerComp(comp);
                try {
                    Thread.sleep(1400);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }   
}

public class AsynFollow extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        if (!taxiFollow.equals("")) {
            number = 1;
            txt_search = compFollow;
            find_url = "http://192.111.125.80:8001/Default.aspx?username=" 
                        + Id + "&password=" + Pass + "&sohieuxe="+txt_search;
            while (!stop){
                new AsynComp().execute();
                try {
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            taxiFollow = "";
        }
        return null;
    }
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        if (!compFollow.equals("")) {
            Toast.makeText(getBaseContext(), "Follow "+compFollow, Toast.LENGTH_SHORT).show();
        } else {
            iv_theodoi.setVisibility(View.VISIBLE);
            iv_theodoif.setVisibility(View.GONE);
            Toast.makeText(getBaseContext(), "Plz choose a marker", Toast.LENGTH_SHORT).show();
        }
    }   
}

我有2个buuton,1个叫AsynFollow.execute(),另一个叫停止它。 此代码可以运行,但应用程序将在一段时间后强制关闭。 有解决方案吗谢谢。 P / s:我是android的新手。

1 个答案:

答案 0 :(得分:1)

你为此承担了asyncTask。对于重复操作,例如在某个时间间隔内更改状态,请使用Timer类。通过这种方式,您可以实现重复操作,可以间隔重复。

通过这种方式,你可以通过点击监听器来停止这段时间。您可以运行两次并使用其他变量指定它的实现。

如果你是newbe,你应该阅读Android中的多任务处理:TimerAsyncTaskHandler

在我看来,这个文档会在stackoverflow中告诉你超过数千条评论。