每隔1分钟如何执行异步任务?

3

我有一个异步任务,用于获取服务器位置并创建一个标记。这个异步任务在OnCreate()函数中只运行一次,并且可以正常工作。但是我需要每分钟运行一次该任务。我读到了需要使用计时器来实现,但我不知道如何实现。下面是异步任务的代码:

    public class AsyncTaskParseJson extends AsyncTask<String, String, String> {
    final String TAG = "AsyncTaskParseJson.java";

    // set json string url 
    String yourJsonStringUrl = url;
    JSONArray dataJsonArr = null;
    @Override
    protected void onPreExecute() {}
    @Override
    protected String doInBackground(String... arg0) {

        try {

            // instantiate json parser
            LatLngActivity jParser = new LatLngActivity();

            // get json string from url
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);
            // get the array of users
            dataJsonArr = json.getJSONArray(ID_CAMION);
            for (int i = 0; i < dataJsonArr.length(); i++) {

                JSONObject c = dataJsonArr.getJSONObject(i);

                // Storing  JSON item in a Variable
                String JSON_latitude = c.getString(TAG_LATITUDE);
                String JSON_longitude = c.getString(TAG_LONGITUDE);
                //converting JSON variables in double variables
                double HTTP_latitude = Double.parseDouble(JSON_latitude);
                double HTTP_longitude = Double.parseDouble(JSON_longitude);
                HTTP_list.add(HTTP_latitude);
                HTTP_list.add(HTTP_longitude);

                // show the values in logcat
                Log.e(TAG, "latitude: " + HTTP_list.get(0)
                                + ", longitude: " + HTTP_list.get(1)
                );

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;

    }
    protected void onPostExecute(String result){
        createHTTPmarker();
    }
}
1个回答

12

在您的Activity中使用TimerTaskTimer。请定义以下方法:

private void setRepeatingAsyncTask() {

    final Handler handler = new Handler();
    Timer timer = new Timer();

    TimerTask task = new TimerTask() {       
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {       
                    try {
                        AsyncTaskParseJson jsonTask = new AsyncTaskParseJson();                        
                        jsonTask.execute();
                    } catch (Exception e) {
                        // error, do something
                    }
                }
            });
        }
    };

    timer.schedule(task, 0, 60*1000);  // interval of one minute

}

现在从你的onCreate()onResume()调用setRepeatingAsyncTask()


如何终止这个处理程序?当我关闭我的应用程序(finish())时,它仍在运行。 - KuKeC
3
еңЁдҪ зҡ„Activityзҡ„onDestroy()ж–№жі•дёӯпјҢдҪҝз”Ёhandler.removeCallbacks(previouslyStartedRunnable)гҖӮе°ҶHandlerе’ҢRunnableйғҪеЈ°жҳҺдёәзұ»еӯ—ж®өгҖӮиҝҷж ·е°ұеҸҜд»Ҙи§ЈеҶій—®йўҳдәҶ... :) - Yash Sampat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接