嗨,我的活动很奇怪。从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没有任何可能损害活动生命周期的内容。
答案 0 :(得分:2)
这些是您无法前往活动的方式。
如果你写了Flags,它将清除堆栈
Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK,Intent.FLAG_ACTIVITY_CLEAR_TOP); // it will clear the stack so remove the line if you written
context.startActivity(homeActivity);
在清单文件
中 android:noHistory="true" // If you written in Manifest remove this line
将活动从一个班级移动到另一个班级
Intent homeActivity = new Intent(context, DJ_HomeActivity.class);
context.startActivity(homeActivity);
finish(); // // If you written in Activity remove this line
删除lauchMode或将标准放入清单文件
android:launchMode="standard"
答案 1 :(得分:0)
我猜你在Manifest.xml中的第二个Activity中设置了FLAG_ACTIVITY_CLEAR_TOP。检查它或添加Manifest.xml和相关的代码段。
答案 2 :(得分:0)
当您按下后退按钮时,方法onBackPressed会执行。如果您没有覆盖它,则将处理默认值。默认使堆栈中的顶级活动成为焦点。但是如果你没有堆栈中的活动,你就会退出。 通过执行finish(),您将终止您的活动,并且它不会保存在堆栈中。 如果您只是调用新意图而不杀死之前的事,onBackPressed将完全按照您的意愿执行。
要熟悉活动生命周期,请按照this链接。