android finish 判断当前_最常用的Activity的onBackPressed()与finish()的区别.

先看onBackPressed():

// 代码源于v4-24.1.1

//这个是FragmentActivity里面的代码

public void onBackPressed() {

//很明显,判断Fragment栈里面有没有回退.

//如果Fragment回退栈有还有Fragment

//则回退一次Fragment,没有才调用onBackPressedNotHandled();

if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) {

onBackPressedNotHandled();

}

}

-----------------------------------分割线------------------------------------------

// 这个是BaseFragmentActivityEclair里面的代码

@Override

void onBackPressedNotHandled() {

//因为新的FragmentActivity是重写的 onBackPressed() 方法

//所以在这里调用父类Activity的onBackPressed();

super.onBackPressed();

}

-----------------------------------分割线------------------------------------------

//最终走到的Activity里面的代码

public void onBackPressed() {

//这是判断ActionBar有没有什么弹出吧.

if (mActionBar != null && mActionBar.collapseActionView()) {

return;

}

//再次判断有没有回退,其实这个判断对于继承FrgamentActivity的来说是没意义的,

//对于继承Activity的来说是有意义的

if (!mFragments.getFragmentManager().popBackStackImmediate()) {

finishAfterTransition();

}

}

//如果没有回退了,调用

public void finishAfterTransition() {

//这里是判断有没有设置回退动画啥的以及退出Activity的处理.

//代码很多,不管这个判断是true还是false,最终都会调用finish();

if (!mActivityTransitionState.startExitBackTransition(this)) {

finish();

}

}

版本不同的sdk,可能会有出入.

--------------------------------------------分割--------------------------------------------

//FragmentActivity的onKeyDown()

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (android.os.Build.VERSION.SDK_INT < 5 /* ECLAIR */

&& keyCode == KeyEvent.KEYCODE_BACK

&& event.getRepeatCount() == 0) {

// Take care of calling this method on earlier versions of

// the platform where it doesn't exist.

onBackPressed();

return true;

}

return super.onKeyDown(keyCode, event);

}

-----------------------------------------分割---------------------------------------

//Activity的onKeyDown()

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

if (getApplicationInfo().targetSdkVersion

>= Build.VERSION_CODES.ECLAIR) {

event.startTracking();

} else {

onBackPressed();

}

return true;

}

.....其他代码省略

}

查看Activity的onKeyDown()的源码,可以发现,按返回键是默认调用的onBackPressed();

总结

如果使用onBackPressed(),假如你的Activity有添加管理fragment回退的话,调用该方法是不会退出Activity的.直到Fragment回退栈清空,才会退出Activity.

如果使用finish(),那么就会直接退出Activity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值