Android 每10秒运行一次异步任务,直到取消
在我的应用程序中,我有一个按钮,它启动一个异步任务,下载带有谷歌地图坐标的数据,然后在地图上以下坐标处绘制一个标记。我想每10秒运行一次,直到用户再次按下按钮 以下是我的处理程序代码:Android 每10秒运行一次异步任务,直到取消,android,android-asynctask,handler,Android,Android Asynctask,Handler,在我的应用程序中,我有一个按钮,它启动一个异步任务,下载带有谷歌地图坐标的数据,然后在地图上以下坐标处绘制一个标记。我想每10秒运行一次,直到用户再次按下按钮 以下是我的处理程序代码: class handleMap{ Handler mHandler = new Handler(); Runnable mTask = new Runnable() { @Override public void run() {
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
并调用newrunnable()
。之后,如果你想继续,
将相同的方法调用到
run()
假设您有一个运行所有内容的按钮,因此将其放入onButtonClick()
我更新了我的问题,说明了我如何尝试实现您的答案,它是有效的,我可以看到我如何获取数据,但应用程序仍然冻结。您有UI线程(主线程)和逻辑线程。若要更新GUI以防止冻结,请使用处理程序。