我制作了一个包含许多活动的应用程序,并且所有活动都包含一个底部导航栏。我用finish();在没有任何内存泄漏问题的意图之后,但是当我按下手机的后退按钮时,该应用程序将关闭。我该怎么办?
//an intent of my app
Button btnsuita = (Button) findViewById(R.id.souita_btn);
btnsuita.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(HotelRooms.this, HotelRoomsSouita.class);
startActivity(intent);
finish();
}
});
//An Example of Bottom Navigation Bar
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.BottomNavView_bar);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
Menu menu = bottomNavigationView.getMenu();
android.view.MenuItem menuItem = menu.getItem(0);
menuItem.setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.ic_home:
Intent intent1 = new Intent(HotelRoomsSouita.this, MainMenu.class);
startActivity(intent1);
finish();
break;
case R.id.ic_back:
Intent intent2 = new Intent(HotelRoomsSouita.this, HotelRooms.class);
startActivity(intent2);
finish();
break;
case R.id.ic_contact_us:
Intent intent3 = new Intent(HotelRoomsSouita.this, Mail.class);
startActivity(intent3);
finish();
break;
}
return false;
}
});
答案 0 :(得分:0)
在每种情况下都请移除开关中的finish()
。
如果要忽略后退按钮单击,则可以在活动中添加此代码。
@Override
public void onBackPressed() {
//Do anything if you wish
}
答案 1 :(得分:0)
由于您已经完成了所有活动,所以有活动保留在后台或后台。因此该应用程序将关闭。
您可以使用视图分页器为底部导航视图填充片段。这是Google Material Design指导方针的正确方法。
请勿在底部导航视图中使用活动。
如果仍然继续进行活动,则重写activtiy的onBackpress方法。
答案 2 :(得分:0)
如果我正确理解了您的问题,那么您希望用户能够返回以前的活动,而您的应用程序不会引起任何内存泄漏(通过一次又一次地启动相同的活动)
解决方案:
onNavigationItemSelected
中的每个案例中删除finish()android:launchMode="singleInstance"
添加到每个活动如果您执行此操作,那么如果用户尝试打开之前已经打开过的同一活动,它将导致该应用打开前一个活动,而不是创建一个新活动。(read more about this)
因此,您不会遇到任何内存泄漏问题:)