【问题标题】:onBackPressed doesn't close activityonBackPressed 不会关闭活动
【发布时间】:2021-03-28 07:53:22
【问题描述】:

我有一个 MainActivity.java,如下所示:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    setContentView(R.layout.activity_main);

}

public void startGame(View v){
    
    Intent i = new Intent(MainActivity.this, StartGame.class);

    startActivity(i);

}

我的 StartGame 类如下:

public class StartGame extends AppCompatActivity {

private Game game;
private Handler updateHandler;
public static Sound sound;

public static Activity activity = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

      sound = new Sound(this);
      game = new Game(this, 3, 0);
      setContentView(game);

      CreateHandler();
      UpdateThread myThread = new UpdateThread(updateHandler);
      myThread.start();

      activity = this;

  }

  private void CreateHandler() {
      updateHandler = new Handler() {
          public void handleMessage(Message msg) {
              game.invalidate();
              game.update();
              super.handleMessage(msg);
          }
      };
   }

   protected void onPause() {
      super.onPause();
      game.pauseGame();
   }

   protected void onResume() {
      super.onResume();
      game.resumeGame();
   }

   @Override
   public void onBackPressed() {
      super.onBackPressed();
   }

}

我的问题是:

我在 MainActivity.java 中,我通过一个 Button 成功启动了 StartGame 的一个新实例(它用和 onDraw 触发了我的游戏)。现在,如果用户按下软后退按钮(导航栏),Activity 将关闭并出现 MainActivity 布局,但我仍然可以听到游戏在后台运行的声音(即使我转到主屏幕),表示活动仍在运行。

我已将 onBackPressed 方法添加到 StartGame.java,但它似乎不起作用。

有人对发生的事情有一些线索吗? :/

【问题讨论】:

    标签: java android android-studio android-activity onbackpressed


    【解决方案1】:

    不知道这是否可行,但尝试一次,

    private UpdateThread myThread

    @Override
        public void onBackPressed() {
            super.onBackPressed();
            myThread.stop(); // don't know 'myThread' has 'stop()' or not
            Intent intent = new Intent(this, MainActivity.class); 
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            startActivity(intent);
            finish();
        }
    

    也试试

    【讨论】:

    • 这不起作用。我仍然可以在后台听到音频,这意味着活动仍然处于打开状态。
    • 感谢您的努力。不幸的是,stop() 已被弃用,因此解决方法将是布尔检查,如下所述。无论如何,谢谢,伙计。
    【解决方案2】:

    你开始了一个你永远不会停止的线程。 该线程是否也负责音频主题?

    在 onBackPressed 中停止你的线程 你也应该在 onBackPressed 中调用finish()

    【讨论】:

    • 你是对的。也许该线程(使游戏保持活力)需要停止。至于音频,它们只是对诸如“playHitSound”之类的方法的调用,当球击中砖块时它会向我播放声音,因此并不那么相关。我应该如何停止 onBackPressed 中的线程?另外,afaik,super.onBackPressed == finish()。
    • 通过在我的线程中添加一个布尔检查并在调用super.onBackPressed() 之后设置myThread.threadSuspended = true; 来修复。更多信息请参考here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多