4

祝大家有美好的一天!

我需要停止方法执行,直到另一个活动结束。目前我正在尝试以这种方式进行操作:

    private boolean isPausedWhileSplash;

public void showSplashWorldChangeAd(String oldWorldName, String newWorldName) {
    overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    Intent intent = new Intent(this, SplashScreen.class);
    intent.putExtra(SplashScreen.MSG_STRING_KEY, oldWorldName + " -> "
            + newWorldName);
    intent.putExtra(SplashScreen.OLD_WORLD, oldWorldName);
    intent.putExtra(SplashScreen.NEW_WORLD, newWorldName);
    startActivityForResult(intent, RESULT_OK);
    isPausedWhileSplash = true;
    while (isPausedWhileSplash) {
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    isPausedWhileSplash = false;
}

但它不起作用。

你能帮助我吗?

谢谢!

UPD:也许有什么方法可以阻止视图绘制?因为我现在需要的只是延迟调用方法,这将重绘这个活动的视图。现在我在启动画面之前绘制了新世界,显示了世界变化,这看起来不太好。

4

2 回答 2

3

我有点赶时间,所以这是一个通用的答案:

public class MonitorObject{
}

public class MyWaitNotify{

  MonitorObject myMonitorObject = new MonitorObject(); //To be used for synch

  public void doWait(){
    synchronized(myMonitorObject){
      try{
        myMonitorObject.wait(); // Wait until the notify method is called by another thread
      } catch(InterruptedException e){...}
    }
  }

  public void doNotify(){ //Notify waiting threads that they can continue
    synchronized(myMonitorObject){
      myMonitorObject.notify();
    }
  }
}

如果您到那时还没有解决方案,我会在今天下午回来为您提供一个工作示例...

这篇文章应该让你开始

编辑: 本文演示了其他方法,所有这些方法都应该是对您当前解决方案的改进。它向您介绍如何从不同线程中的事件更新 UI,以及各种解决方案的好处/成本。

于 2012-08-20T08:12:23.693 回答
1

我猜你正在尝试做这样的事情:

public void showSplashWorldChangeAd(String oldWorldName, String newWorldName){
    /* You have done some initialization work */
    startActivityForResult(intent, RESULT_OK);
    /* This is what you want to do after the activity returns */
    afterActivityReturns();
}

那为什么不这样进行呢?

public void showSplashWorldChangeAd(String oldWorldName, String newWorldName){
        /* You have done some initialization task here*/
        startActivityForResult(intent, RESULT_OK);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        /* This is what you want to do after the activity finishes */
        afterActivityReturns();
    }

但是如果你真的想showSplashWorldChangeAd因为某种原因停止这个方法,你需要锁和钥匙(正如 Basic 所说)。

于 2012-08-20T08:24:33.310 回答