android while循环替代

时间:2014-10-15 09:03:19

标签: android while-loop

这是我的第一个Android应用程序,我发现while循环问题,我试图在我的Android应用程序上使用while循环,但应用程序冻结。

我要做的是跟踪用户位置(使用onlocationChanged)并继续查询该位置,直到查询返回结果。它是一个GIS应用程序,所以我将描述应用程序行为: 应用程序使用监听器" onLocationChangedListener"跟踪用户位置。并将其存储在变量" myPosition"中。我正在使用布尔值" noResults = true"。我将使用方法"查询(myPosition)"在while循环中,此方法有一个回调函数,当找到结果时,它会更改一个布尔值" noResults"为假。循环将继续,直到" noResults"是假的(这意味着查询的回调改变了布尔值)

,这就是我的所作所为:

while(noResults)
{
//myPosition keeps changing 
      query(myPosition);
//query has a callback that when a result is found it changes noResults to false
}

4 个答案:

答案 0 :(得分:1)

我使用" Handler"解决了这个问题。每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);

答案 1 :(得分:0)

也许你应该使用AsyncTask?我不太确定你的问题是什么。

答案 2 :(得分:0)

循环在android(或任何语言)中不是问题。

有两种情况可能是你冻结的原因,

  1. 如果你在api中运行网络调用,android会抛出错误并崩溃。您必须在Aysnc Task ot threading

  2. 中进行与网络相关的调用
  3. 使用try throw catch和exception case来避免应用崩溃和更好的编码技巧。

答案 3 :(得分:0)

运行while主线程上的循环代码冻结UI,并使所有其他进程暂停,使您的应用无响应使用

Threads..

另请注意,您运行的while循环正在默认线程上运行,该线程称为ui线程,因此在短时间运行时,循环在不同的线程上。 例如..

new Thread(new Runnable() {

    @Override
    public void run() {
    // Your hard while loop here
    //get whatever you want and update your ui with ui communication methods.
    }
).start();

用于ui沟通方法

View.post(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    Toast.makeText(getActivity(), "updated ui", Toast.LENGTH_LONG).show();
    }
});    

视图可以是您正在更新的任何视图。 也像@TehCoder说你可以使用asynctask但asynctask并不意味着长时间的工作流程有3个,但我不记得最后一个