我有一个场景,用户可以点击后退按钮访问上一个活动或做其他事情,活动将自行结束(例如来电,点击电源按钮,切换应用...)。这些调用必须返回与前一个活动不同的结果(使用startActivityForResult
调用),它可以是一个优雅的退出,也可以是一个混乱的,根据哪个动作将被采取...
现在,当Android调用onBackPressed
时,它也会始终调用onStop
,而不是反过来。因此,当我致电onBackPressed
而不致电onStop
时,我希望我的应用完成,在finish()
内调用onBackPressed
无效。
一些代码来说明我的问题:
@Override
public void onStop() {
// this gets called no matter what, I don't like that
Log.i(TAG, "Canceled");
setResult(RESULT_CANCELED, new Intent());
finish();
super.onStop();
}
@Override
public void onBackPressed() {
Log.i(TAG, "User ended activity");
setResult(RESULT_OK, new Intent());
finish();
super.onBackPressed();
}
答案 0 :(得分:2)
如果您不想在应用关闭时反复拨打setResult()
,请使用Activity.isFinsihing():
@Override
public void onStop() {
// Now this is only called if Activity is not finishing already
if(!isFinishing()) {
Log.i(TAG, "Canceled");
setResult(RESULT_CANCELED, new Intent());
finish();
}
super.onStop();
}