如何手动暂停Android中的活动?

时间:2013-08-23 14:47:58

标签: android

当您按下Android中的后退按钮时,它会调用finish(),并且我希望将其替换为暂停行为,并且我找不到允许您手动触发的文档。

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

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()但只是将我的应用程序呈现为无效状态。

4 个答案:

答案 0 :(得分:9)

要覆盖后退按钮的行为,您可以覆盖按下后退按钮时调用的onBackPressed()中的Activity方法:

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

通过使用moveTaskToBack(true)您的活动被发送到后台,但无法保证它将保持“暂停”状态,Android可以在需要内存时将其终止。我不知道为什么你想要这种行为我认为最好保存Activity状态并在你回来时恢复它,或者简单地用你想要带来的新Activity启动另一个Intent。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为你需要暂停活动,当onbackpress()调用我这样做只是调用暂停方法它对我有用

enter code here@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onPause();

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

答案 3 :(得分:-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);
   }
});