android - 每 10 秒运行一次 AsyncTask 直到被取消

标签 android android-asynctask handler

在我的应用程序中,我有一个启动 AsyncTask 的按钮,它下载带有谷歌地图坐标的数据,然后在 map 上的以下坐标处绘制一个标记。我想每 10 秒运行一次,直到用户再次按下按钮。

这是我的处理程序代码:

    class handleMap{
    Handler mHandler = new Handler();

    Runnable mTask = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(btnRefreshPressed == false){

                try{
                    new getGoogleMap().execute();
                    mHandler.postDelayed(mTask, INTERVAL);
                    Thread.sleep(INTERVAL);
                } catch(Exception e){
                    System.out.println(e.toString());
                }
            }
        }
    };

    public void starReapetingClass (){
        hMap.starReapetingClass();
    }
    public void stopDoing(){
        mHandler.stopDoing();
    }
}

在调用它的菜单按钮中:

    case R.id.id_Refresh:
        handleMap hMap = new handleMap();
        if(btnRefreshPressed == true){
            menuItem = item;
            menuItem.setActionView(R.layout.progressbar);
            menuItem.expandActionView();


            fRun += 1;
            btnRefreshPressed = false;
            hMap.run();
        }else if(btnRefreshPressed == false){
            if(fRun > 0){
                menuItem.collapseActionView();
                menuItem.setActionView(null);
            }
            btnRefreshPressed = true;
            hMap.stopHandler();
        }

目前这会导致应用程序卡住,系统会输出一个对话框,说明应用程序没有响应,并询问我是要关闭还是等待。

我怀疑它与 while 语句有关,但我在 logcat 中没有收到任何错误。 提前致谢。

最佳答案

只需使用:

private int mSampleDurationTime = 10000;
private boolean continueToRun = true;

mHandler.postDelayed(mRunnable, mSampleDurationTime);

mRunnable 是你的任务:

private final Runnable mRunnable = new Runnable() {

 //...
public void run() {

   ...

   if(continueToRun == true){
    mHandler.postDelayed(mRunnable, mSampleDurationTime);
   }

 }
    ...
};

第一次调用 postDelayed 并调用 new Runnable()。之后,如果你想继续, 在 run()

中调用相同的方法

关于android - 每 10 秒运行一次 AsyncTask 直到被取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188118/

相关文章:

android - savedInstanceState 给了我一个错误的值

java - Android单元测试: How do I test this?

android - 启动android应用时出错

android - 获取新保存数据的数据库 ID 并将其传递给之前的 Activity

java - HttpURLConnection.getInputStream() 挂起并且永远不会完成

android - 在服务中使用 AsyncTask 时如何保存状态?

Android:是否可以制作一个带有可绘制对象的列表,1 在上面,其他在下面?

javascript - 循环中的自动提交处理程序

android - 如何刷新处理程序中的待处理消息和回调

ios - 如何在 swift 中有效地使用处理程序?