0

我有 2 个 Asynctask,1 个用于从服务器获取数据(位置),然后在地图上设置一个带有该位置的标记,另一个在循环中调用 1st 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 个按钮,1 个用来调用 AsynFollow.execute(),另一个用来停止它。此代码可以运行,但应用程序会在一段时间后强制关闭。有什么解决办法吗?谢谢。P / s:我是android的新手。

4

1 回答 1

1

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

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

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

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

于 2013-09-23T12:45:09.943 回答