Таким образом, мне удается заставить мою программу потерять фокус при нажатии кнопки "Домой" и успешно вернуть активность при возобновлении, к сожалению, метод, который я использую, заставляет Thread зависать, когда экран изменяется в том смысле, что он не теряет фокус немедленно.
EDITTED - Размещено onResume в основную деятельность
@Override
protected void onPause()
{
super.onPause();
synchronized (mPauseLock) {
mPaused = true;
}
return;
}
@Override
public void onResume() {
super.onResume();
synchronized (mPauseLock) {
mPaused = false;
mPauseLock.notifyAll();
}
}
public class ThreadClass extends Thread
{
boolean isRunning;
public void BeginThread()
{
if (mGameIsRunning) {
onResume();
}else{
if(isRunning)return;
isRunning=true;
start();
mGameIsRunning=true;
}
}
public void run()
{
Canvas canvas;
while(isRunning)
{
canvas=null;
try
{
canvas = canvasClass.surfaceHolder.lockCanvas(null);
synchronized (canvasClass.surfaceHolder)
{
//processClass.processGame();
canvasClass.onDraw(canvas);
}
}finally{
if(canvas!=null)
{
canvasClass.surfaceHolder.unlockCanvasAndPost(canvas);
}
}
synchronized (mPauseLock)
{
while (mPaused)
{
try
{
mPauseLock.wait();
} catch (InterruptedException e) {
}
}
}
}
}
}
Что нужно изменить, чтобы действие приостанавливалось при нажатии "Домой" и выбрасывалось из стека при нажатии "Назад"? Также, как объясняется, такая же проблема возникает, когда меняется ориентация экрана.
Почему onResume находится внутри класса потоков? Если это фактический код, удалите его в класс активности. Остальная часть кода выглядит нормально.