2014-02-25 28 views
0

我有一个问题暂停游戏线程时,home键被按下,再进入恢复游戏线程

当击中home键,我的游戏线程类被暂停。但是,当重新进入应用程序和onResume()方法被调用时,它应该恢复游戏线程...我得到的每一个东西都是一个关闭的力量。

这里是我的MainActivity:

public class MainActivity extends Activity { 

private RelativeLayout relativeLayout; 
private GameView gameView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    gameView = new GameView(this, this); 
    setContentView(R.layout.activity_main); 
    relativeLayout = (RelativeLayout)findViewById(R.id.mainView); 
    relativeLayout.addView(gameView); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    gameView.pause(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if(gameView.getGameThread() != null) { 
     if(gameView.getGameThread().isRunning == false) { 
      gameView.resume(); 
     } 
    } 
} 
} 

gameView是继类,一surfaceView越来越呈现由GameThread:

public class GameView extends SurfaceView{ 

private GameThread gameThread; 

public GameView(Context context, Activity activity) { 
    super(context); 

    gameThread = new GameThread(this); 
    holder = getHolder(); 
    holder.addCallback(new SurfaceHolder.Callback() { 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 

     } 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 
      gameThread.setRunning(true); 
      gameThread.start(); 

     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, 
       int height) { 

     } 
    }); 
} 

public GameThread getGameThread() { 
    return gameThread; 
} 


public void update() { 

} 


public void pause() { 
    gameThread.pause(); 
} 

public void resume() { 
    gameThread.resumeThread(); 
} 
} 

这是GameThread类:

public class GameThread extends Thread{ 

private GameView view; 
public boolean isRunning = false; 

public GameThread(GameView view) { 
    this.view = view; 
} 

public void setRunning(boolean setRunning) { 
    isRunning = setRunning; 
} 

public void stopThread() { 
    isRunning = false; 
} 

public void run() { 
    while(isRunning) { 
     Canvas c = null; 
     view.update(); 
     try { 
      c = view.getHolder().lockCanvas(); 
      synchronized (view.getHolder()) { 
       view.draw(c); 
      } 
     }finally { 
      if(c != null) { 
       view.getHolder().unlockCanvasAndPost(c); 
      } 
     } 
    } 
} 

public void startThread() { 
    isRunning = true; 
} 

public void pause() { 
    isRunning = false; 
} 

public void resumeThread() { 
    isRunning = true; 
} 
} 

我删除代码中不相关的部分。

当重新进入android.view.Choreographer类打开

任何想法的应用程序?

回答

1

其实你并没有暂停你的线程(严格来说,暂停线程是没有的)。你正在结束你的线程。

当您调用pause()时,您将isRunning标志设置为false,使线程退出循环并且线程结束。当您将'isRunning'设置为true时,该线程将不会重新启动。

其实你不能在java中重用线程,你必须创建一个新的线程,因为一旦线程循环结束,它已经死了。

+0

好的,谢谢你的回答,我会检查一个不同的解决方案。 。 。 – user2410644