2013-08-23 26 views
3

当你在Android中按下后退按钮时,它会调用finish(),并且我希望它被替换为暂停行为,并且我没有找到让你手动触发的文档。如何在Android中手动暂停活动?

编辑:好吧,这需要更多的代码,我想

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    int Action = event.getAction(); 
    if (Action == KeyEvent.ACTION_DOWN) 
    { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) 
     { 
     //Default Implementation calls finish(); 
     //I want to call Pause, which should call onPause and then send my app in the background ! 

      } 
     } 
} 

我只是想onBackPressed,它甚至不被打到与Android 4.3至少上面的代码。我尝试手动调用onPause(),但只是呈现我的应用程序进入无效状态。

+2

使用onBackPressed()并实现您想要的行为? –

+0

只需添加--' onBackPressed'必须在函数本身的顶部有'@ Override'。然后做任何你想处理这个按键。 – g00dy

+0

当活动检测到用户按下后退键时调用。默认实现只是完成当前活动...我想实现暂停活动:/ – RelativeGames

回答

8

要覆盖的后退按钮的行为,你可以覆盖onBackPressed()方法在你Activity当你按下后退按钮被称为:

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); // "Hide" your current Activity 
} 

使用moveTaskToBack(true)您的活动发送到后台,但难保它将保持“暂停”状态,如果Android需要内存,它可以杀死它。我不知道为什么你想要这种行为我认为最好是保存活动状态,并在你回来或简单地恢复它时,用你想带来的新活动启动另一个意向。

+0

谢谢,除了在那里做这个过程之外,moveTaskToBack(true)的作用就像调用理论上的Pause()一样。该代码需要在KeyDown中进行(因为我也可以执行其他关键点处理) – RelativeGames

-1

使用此代码与onBackPressed(){ }

boolean mIsPaused = false; 

final Thread workerThread = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     doA(); 
     checkPause(); 
     doB(); 
     checkPause(); 
     ... 
    } 
    } 
}); 

private void checkPause() { 
    while(isPaused()) { 
     // you could also use the notify/wait pattern but that is probably needless complexity for this use case. 
     Thread.sleep(50); 
    } 
} 

private synchronized boolean isPaused() { 
    return mIsPaused; 
} 

private synchronized void setPaused(boolean isPaused) { 
    mIsPaused = isPaused; 
} 


pauseButton.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     // disable any UI elements that need it 
     setIsPaused(true); 
    } 
}); 

unPauseButton.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View v) { 
     // re-enable any UI elements that need it 
     setIsPaused(false); 
    } 
}); 
0

我想他询问是否可以手动发送活动的onPause状态。只要活动在前台,我认为这是不可能的。但是,您可以启动将手机发送回主屏幕或启动其他活动以将以前的活动发送到暂停状态的意图。

0

我认为你需要暂停活动时onbackpress()叫我这样做,只是呼吁暂停方法是为我工作

enter code [email protected] 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onPause(); 

} 
@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 
}