android while循环替代方案
这是我的第一个Android应用程序,我发现while loop有问题,我试图在我的Android应用程序上使用while loop,但应用程序冻结了 我试图做的是跟踪用户位置(使用onlocationChanged)并继续查询该位置,直到查询返回结果。这是一个GIS应用程序,因此我将描述应用程序的行为: 应用程序使用侦听器“onLocationChangedListener”跟踪用户位置,并将其存储在变量“myPosition”中。我使用的是布尔值“noResults=true”。我将在while循环中使用一个方法“query(myPosition)”,该方法在找到结果时具有回调,并将布尔值“noResults”更改为false。循环将继续,直到“noResults”为false(这意味着查询的回调更改了布尔值) ,以下是我所做的:android while循环替代方案,android,while-loop,Android,While Loop,这是我的第一个Android应用程序,我发现while loop有问题,我试图在我的Android应用程序上使用while loop,但应用程序冻结了 我试图做的是跟踪用户位置(使用onlocationChanged)并继续查询该位置,直到查询返回结果。这是一个GIS应用程序,因此我将描述应用程序的行为: 应用程序使用侦听器“onLocationChangedListener”跟踪用户位置,并将其存储在变量“myPosition”中。我使用的是布尔值“noResults=true”。我将在whi
while(noResults)
{
//myPosition keeps changing
query(myPosition);
//query has a callback that when a result is found it changes noResults to false
}
也许你应该使用异步任务?我不太确定您的问题是什么。在android(或任何语言)中循环都不是问题 有两种情况可能是你冻僵的原因
在主线程上运行while循环代码会冻结UI,并使所有其他进程暂停,从而使应用程序无法响应
Threads..
还要注意,您正在运行的while循环运行在一个名为ui线程的默认线程上,因此在短期内while循环运行在单独的线程上。。
例如
用于用户界面通信方法
View.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "updated ui", Toast.LENGTH_LONG).show();
}
});
视图可以是您正在更新的任何视图。。
另外,正如@TechCoder所说,您可以使用asynctask,但asynctask不适用于长时间工作。下面的工作有3个,但我记不起最后一个了。我使用每5秒查询功能层的“处理程序”解决了问题,这会阻止主线程生成应用程序不响应错误:
Handler m_handler=new Handler();
Runnable m_runnable;
m_runnable = new Runnable(){
public void run() {
//query code here
m_handler.postDelayed(m_runnable, 5000);
}
};
m_handler.postDelayed(m_runnable, 0);
在此处共享您的代码。请在此处发布您的代码,当您的问题涉及技术问题时,请记住始终共享代码。请尝试在辅助线程中获取位置,而不是在主线程中获取位置。您将“while”放在何处?若有,;在onCreate中,您正在阻止主线程!!!请检查编辑问题是这是一个很长的工作流程,我读到AsyncTask应该用于简短的工作流程
Handler m_handler=new Handler();
Runnable m_runnable;
m_runnable = new Runnable(){
public void run() {
//query code here
m_handler.postDelayed(m_runnable, 5000);
}
};
m_handler.postDelayed(m_runnable, 0);