如何每1分钟执行一次asynctask?

Die*_*ena 2 android timer android-asynctask

我有一个asynctask获取服务器的位置并制作一个标记,asynctask在OnCreate()运行一次并且工作正常但我需要每分钟运行它,我读到我需要使用计时器但我不明白如何实现它,继承asynctask:

    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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Y.S*_*Y.S 10

使用Timera TimerTask.在您的Activity:中定义以下方法:

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

}
Run Code Online (Sandbox Code Playgroud)

现在打电话setRepeatingAsyncTask()给你onCreate()onResume().

  • @KuKeC:在`Activity`的`onDestroy()`方法中,使用`handler.removeCallbacks(previousStartedRunnable);`.声明`Handler`和`Runnable`作为类字段.这样就可以了...... :) (3认同)