点击back 键返回home,再进入APP 时重走启动页面

1.问题说明

在做APP优化的时候碰到了该问题。

点击了back键,APP返回到手机home 界面 ,再点击APP 图标的时候,先进入启动界面,然后才进入HomeActivity,这交互肯定是有问题的。

2.解决方法

官网API 查询地址(https://www.android-doc.com/reference/android/app/Activity.html

先在启动页面的onCreate() 方法中调用如下代码。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        //判断是否是栈底,如果不是,则直接finish
        if (!isTaskRoot()) {
            finish();
            return;
        }
        super.onCreate(savedInstanceState);
        Log.i("StartActivity","onCreate");
        setContentView(R.layout.activity_start);
    }
isTaskRoot()方法官网说明:
Return whether this activity is the root of a task. 返回此活动是否是任务的根。

然后在你的homeActivity 中 的 onKeyDown() 方法中添加如下判断。如果你在homeActivity 中有添加fragment ,你应该判断一下fragment 的活动栈 ,如果栈中有fragment ,先让栈里面的fragment 先出栈。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //采用moveTaskToBack 方法,当用户点击返回时,将APP隐藏到后台。再次打开的时候,APP进程还存在,不打开闪屏界面 ,直接进入home 界面。
        //getSupportFragmentManager().getBackStackEntryCount() :fragment 活动栈如果不为空,继续走fragment 活动栈。
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN &&getSupportFragmentManager().getBackStackEntryCount()==0) {
            moveTaskToBack(true);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

moveTaskToBack() 方法说明:

public boolean moveTaskToBack (boolean nonRoot)

Move the task containing this activity to the back of the activity stack. The activity's order within the task is unchanged.

If false then this only works if the activity is the root of a task; if true it will work for any activity in a task.

  • 参数说明:

    参数为false——代表只有当前activity是task根,指应用启动的第一个activity时,才有效;

    参数为true——则忽略这个限制,任何activity都可以有效。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值