Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java onBackPressed不';t关闭活动_Java_Android_Android Studio_Android Activity_Onbackpressed - Fatal编程技术网

Java onBackPressed不';t关闭活动

Java onBackPressed不';t关闭活动,java,android,android-studio,android-activity,onbackpressed,Java,Android,Android Studio,Android Activity,Onbackpressed,我有一个MainActivity.java,如下所示: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_POR

我有一个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);

}
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();
   }

}
我的StartName课程如下:

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);

}
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中,我通过一个按钮成功地启动了StartName的一个新实例(它使用和onDraw启动游戏)。现在,如果用户按下软后退按钮(导航栏),活动将关闭,主活动布局将出现,但我仍然可以听到游戏在后台运行的声音(即使我进入主屏幕),这意味着活动仍在运行

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


有人知道发生了什么事吗/

不知道这是否有效,但试一下

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();
    }

也试试看,不知道这是否有效,但试一下

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();
    }

也可以尝试启动一个永不停止的线程。 该线程是否也负责音频主题

停止你的线程在反压
此外,在onBackPressed中调用
finish()
可以启动一个永不停止的线程。 该线程是否也负责音频主题

停止你的线程在反压
您还应该在onBackPressed中调用
finish()
,但这不起作用。我仍然可以听到背景中的音频,这意味着活动仍在进行中。我已经编辑了我的回答谢谢你的努力<不幸的是,code>stop()已被弃用,因此解决方法是如下所述的布尔检查。无论如何,谢谢你,伙计,这没用。我仍然可以听到背景中的音频,这意味着活动仍在进行中。我已经编辑了我的回答谢谢你的努力<不幸的是,code>stop()已被弃用,因此解决方法是如下所述的布尔检查。谢谢你,伙计,你说得对。也许这个线程(让游戏保持活力)需要停止。至于音频,它们只是对“playHitSound”等方法的调用,每当球碰到砖块时,这些方法都会给我播放一个声音,所以实际上并不相关。我应该如何停止在反压线程?另外,afaik,super.onBackPressed==finish()。通过在我的线程中添加一个布尔检查并设置
myThread.threadSuspended=true来修复super.onBackPressed()
后立即执行code>。参考更多信息。你是对的。也许这个线程(让游戏保持活力)需要停止。至于音频,它们只是对“playHitSound”等方法的调用,每当球碰到砖块时,这些方法都会给我播放一个声音,所以实际上并不相关。我应该如何停止在反压线程?另外,afaik,super.onBackPressed==finish()。通过在我的线程中添加一个布尔检查并设置
myThread.threadSuspended=true来修复super.onBackPressed()
后立即执行code>。有关更多信息,请参阅。