【发布时间】:2025-12-04 16:45:02
【问题描述】:
您好,我的活动有奇怪的行为。从 MainActivity 我开始另一个活动,一切都很酷。如果我按返回键,应用程序不会返回到之前的活动,而是返回到桌面。
当我开始其他活动时,我没有在 MainActivity 中调用 destory 或完成。
在我更改应用程序中的一些服务并且一切正常之前几个小时,它突然开始以这种方式运行。我没有改变任何关于活动调用的东西。
public class EpgActivity extends Activity {
private EpgRectangleView epgRectangleView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
epgRectangleView = new EpgRectangleView(this);
epgRectangleView.setBackgroundColor(Color.BLUE);
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(epgRectangleView);
System.out.println("BOOSTED: " + epgRectangleView.isHardwareAccelerated());
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
epgRectangleView.getEpgScreenService().onClick(keyCode);
epgRectangleView.invalidate();
epgRectangleView.clearAnimation();
return super.onKeyDown(keyCode, event);
}
}
知道什么会导致这种行为吗?
public class MainActivity extends Activity {
private MainViewModel mainViewModel;
private ActivityMainBinding binding;
private DrawerLayout drawerLayout;
@Override
public void sendBroadcast(Intent intent) {
super.sendBroadcast(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View decorView = getWindow().getDecorView();
/*int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
*/
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.activity_main);
initDataBinding();
}
private void initDataBinding() {
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
mainViewModel = MainViewModel.getInstance(this);
binding.setMainViewModel(mainViewModel);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.openDrawer(GravityCompat.START);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
drawerLayout.closeDrawer(Gravity.LEFT);
}
}, 1200);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Toast.makeText(this,event.getKeyCode() + "",
Toast.LENGTH_SHORT).show();
if (keyCode == KeyEvent.KEYCODE_ENTER) {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(Gravity.LEFT);
} else {
drawerLayout.openDrawer(GravityCompat.START);
}
}
if (keyCode == KeyEvent.KEYCODE_X) {
startActivity(new Intent(this, EpgActivity.class));
}
return super.onKeyDown(keyCode, event);
}
}
请记住,对象 ViewModel 没有任何可能损害 Activity 生命周期的内容。
【问题讨论】:
-
能否在您的问题中添加代码 sn-ps?
-
分享你所做的事情
-
具体来说,分享一下你在这两个活动中用来处理后按事件的代码。
-
在此处分享您的代码
-
请分享您的代码
标签: android android-activity onbackpressed