@Override
public
boolean
onKeyDown
(
int
keyCode, KeyEvent event) {
if
(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() ==
0
) {
Log.d(TAG,
"onKeyDown()"
);
return
super
.onKeyDown(keyCode, event);
@Override
public
void
onBackPressed
() {
Log.d(TAG,
"onBackPressed()"
);
super
.onBackPressed();
onBackPressed与onKeyDown区别:
相同点:
最终都会调用finish方法
不同点:
onBackPressed适用于api小于5(Android2.0),且按back键,无重复
onKeyDown适用于Android2.0或更新版的sdk
onBackPressed与finish区别:
如果使用onBackPressed(),假如你的Activity有添加管理frgament回退的话,调用该方法是不会退出Activity的.直到Fragment回退栈清空,才会退出Activity。
如果使用finish(),那么就会直接退出Activity。
Activity中finish() onDestroy() 和System.exit()的区别
Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。
因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。
Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。
System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。
finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。
安卓系统自己决定何时从内存中释放应用程序。
当系统没有可用内存到时候,会按照优先级,释放部分应用。
源码探索:
1 点击 super.onKeyDown(keyCode, event);
public
boolean
onKeyDown
(
int
keyCode, KeyEvent
event
) {
if
(VERSION.SDK_INT <
5
&& keyCode ==
4
&&
event
.getRepeatCount() ==
0
) {
this
.onBackPressed();
return
true
;
}
else
{
return
super.onKeyDown(keyCode,
event
);
1.1 点击查看 this.onBackPressed();方法:
public void onBackPressed() {
if(!this.mFragments.getSupportFragmentManager().popBackStackImmediate()) {
this.supportFinishAfterTransition();
1.1.1 点击this.supportFinishAfterTransition();方法
public void supportFinishAfterTransition() {
ActivityCompat.finishAfterTransition(this);
1.1.1.1 点击ActivityCompat.finishAfterTransition(this);方法
public static void finishAfterTransition(Activity activity) {
if(VERSION.SDK_INT >= 21) {
ActivityCompat21.finishAfterTransition(activity);
} else {
activity.finish();
1.1.1.1.1 点击ActivityCompat21.finishAfterTransition(activity);方法
public static void finishAfterTransition(Activity activity) {
activity.finishAfterTransition();
1.1.1.1.1.1 点击activity.finishAfterTransition();方法
public void finishAfterTransition() {
if (!mActivityTransitionState.startExitBackTransition(this)) {
finish();
监听返回键的两种方式: // 捕获返回键的方法1 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下
目录概述onBackPressed()的原定义onBackPressed()的重写重写onBackPressed()的完整代码
onBackPressed()是用户点击Back键时系统调用的方法,用于从当前Activity返回到上一个Activity。在代码中调用此方法也会起到“按”Back键的效果。可以重写此方法以达到自定义目的。
onBackPressed()的原定义
onBackP...
我容易不区分 onDestroy 、onBackpress、onFinish。
其实,可以这样理解:
(1)onDestory 的使用,是销毁了activity的实例在内存所占的空间
在activity生命周期中,onDestory是生命的最后一步,资源回被回收
(2)onFinish
在activity动作完成时,activity关闭时,若被调用,只是...
@Override
public void onBackPressed() {
String titleStr = edittitle.getText().toString();
String contentStr = editcontent.getText().toString();
if (...
问题:onBackPressed导致FragmentActivity重启描述:HomeActivity和MyTsyActivity是FragmentActivity的两个子类。从HomeActivity跳转到MyTsyActivity很流畅,没有出现任何问题。Intent intent = new Intent(context, MyTsyActivity.class);
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//如果点击的是后退键 首先判断webView是否能够后退
//如果点