2011-10-17 199 views
0

我對此很陌生,所以也許這對每個人都是微不足道的,但我無法弄清楚,爲什麼這不起作用。我已經讀過它,嘗試了很多方法,但仍然無法工作。所以我想在android(java)中暫停一個線程。我想讓它運行,凍結屏幕1秒,然後繼續工作。就這樣。爲什麼這不起作用?Android/Java - 暫停線程

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) { 
      } 
     } 

    } 

}; 

}

+0

你在while(暫停)循環中的異常可能會觸發。將異常消息記錄到catch塊中的控制檯。 –

回答

1

你應該改變的方法的順序調用,您編碼:

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

更改爲:

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

,它應該工作。

+0

這種方式我只能看到黑屏。 – JuhG

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 
} 
0

呼叫Thread.sleeponCreate方法。扔掉所有線程的東西。這是錯誤的。

爲什麼你想凍結屏幕?這是一個非常糟糕的做法。改用對話框。

0

如果你需要凍結屏幕,您只需要使用SystemClock.sleep(millis)來 .//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 
       } 
      }); 

     } 
    }); 
0

使用本

delayprg(3000); // 3seg

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