如何等待代码执行?

时间:2013-11-12 12:41:10

标签: java android

我在Java / Android中有一些代码。请看一下以下代码:

    @Override
public void onReceive(Context context, Intent intent) {


    mInfo.execute();
    recentPics= mInfo.getNumberOfRecentPics();


    Log.d("LOG", ""+recentPics);
}

mInfo变量是AsyncTask的一个对象,它从Web服务器中提取最近的图片数量。它们是成功的,但问题是“LOG”显示了当前执行的代码中最近的旧图片。例如:

//Receiver execution No1
recentPics = 0;
m.Info.getNumberOfRecentPics() // let's say returns 3
Log.d("LOG", ""+recentPics) // will show 0 at this point of time

//Receiver execution No2
m.Info.getNumberOfRecentPics() // let's say returns 5
Log.d("LOG", ""+recentPics) // will show 3 at this point of time (reads variable from previous execution )

我知道这是因为“LOG”代码在“getNumberOfRecentPics”方法完成它的工作之前执行。

问题:我的问题很简单。如何等待代码执行,直到“getNumberOfRecentPics”返回更新的数字?

编辑:我听说过对象监听器(听一些动作)。我是否需要学习如何在这种场合制作它们,还是有另一种解决方案?

3 个答案:

答案 0 :(得分:2)

我会这样使用它,只需覆盖你需要它的onPostExecute或创建一个自己的界面

//create a object f your asyncclass and 
//override the onPostExecute where you need it
mInfo = new ASYNCCLASS({
   @Override
   public void onPostExecute(Object result){
      //doSomething
      Log.e(...);
  }
}).execute();

等待不是答案,因为你不知道你的Asynctask需要多长时间才能结束。 上面的代码没有测试,只是假,但它应该显示我的意思。

这里没有我的IDE,所以如果有必要的话,任何人都会更正括号!

格尔茨

答案 1 :(得分:0)

您可能对以下链接感兴趣吗?当我遇到类似的问题时,我有时会使用锁来让一个线程通知另一个线程,发生了重要的事情。

http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html

答案 2 :(得分:0)

我没有真正得到你想要做的事情,但我认为你可以使用等待和通知。您可以使用运行Logging的线程等待一个Object,并在执行pics获取的线程中通知或w \ e