3

当您在 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

4 回答 4

10

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

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

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

于 2013-08-23T14:51:59.480 回答
0

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

于 2013-08-23T15:11:16.267 回答
0

我认为你需要在调用 onbackpress() 时暂停 Activity 我这样做只是为了调用 pause 方法,它对我有用

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();
}
于 2015-11-16T07:22:19.573 回答
-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);
   }
});
于 2013-08-23T14:54:11.233 回答