gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:37:05 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个启动 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com