Java onBackPressed不';t关闭活动
我有一个MainActivity.java,如下所示: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
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>。有关更多信息,请参阅。