我是新手,所以也许这对每个人来说都是微不足道的,但我无法弄清楚,为什么这不起作用。我已经读过它,试过很多方法,但仍然无法正常工作。所以我想在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) {
}
}
}
};
}
答案 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) {
}
}