Android / Java - 暂停线程

时间:2011-10-17 13:45:32

标签: java android multithreading

我是新手,所以也许这对每个人来说都是微不足道的,但我无法弄清楚,为什么这不起作用。我已经读过它,试过很多方法,但仍然无法正常工作。所以我想在android(java)中暂停一个线程。我希望它运行,冻结屏幕1秒,然后继续工作。就这样。为什么这不起作用?

public class Game extends Activity {

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

        runner.join();
        runner.start();

        // do stuff

        pause();

        // do stuff


}

private boolean running = true;
private boolean paused = false;

public void setRunning(boolean run) {
    running = run;
}

public void pause() {
    paused = true;
}

Thread runner = new Thread() {

    public void run() {

        while (running) {

            try {

                //do stuff

                Thread.sleep(100);

                while (paused) {
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                    } finally {
                        paused = false;
                    }
                }

            } catch (Exception e) {
            }
        }

    }

};

}

5 个答案:

答案 0 :(得分:1)

您应该更改方法调用的顺序,您编码:

    runner.join();
    runner.start();

更改为:

runner.start();
runner.join();

它应该有用。

答案 1 :(得分:0)

你必须避免旋转试试这个:

private boolean isPaused = false;


public synchronized void pause(){
    isPaused = true;
}

public synchronized void play(){
   isPaused = false;
   notyfyAll();
}

public synchronized void look(){
   while(isPaused)
      wait();
}

 public void run(){
     while(true){
        look();
        //your code
 }

答案 2 :(得分:0)

Thread.sleep方法中调用onCreate。抛弃所有线程的东西。这是错的。

为什么要冻结屏幕?这是一个非常糟糕的方法。改为使用Dialog。

答案 3 :(得分:0)

如果你需要冻结屏幕,你只需要使用 SystemClock.sleep(毫秒) .// 1000 = 1秒 Android使用主线程为您的界面非常不同。你的代码尝试像java程序一样停止它。

示例

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    SystemClock.sleep(1000);

...

或搜索这样的信息:

//this is similar to your thread
   new Thread(new Runnable() {
       @Override
       public void run() {
           //some code
           int val = 1+ 1; //code here dont interrupt main thread

           //this code run on main thread
           mActivity.runOnUiThread(new Runnable() {
               @Override
               public void run() {
                   //freeze Views
                   SystemClock.sleep(1000);// 1 second
               }
           });

       }
   });

答案 4 :(得分:0)

使用此

delayprg(3000); // 3seg

 private void delayprg(int delayc) {
        try {
            Thread.sleep(delayc);
        } catch (InterruptedException e) {
        }
    }