【问题标题】:Calling finish() in onStop()在 onStop() 中调用 finish()
【发布时间】:2014-01-03 13:14:20
【问题描述】:

onStop()方法中调用finish()方法会发生什么?

它会导致 anr :意味着它调用了

onPause()->onStop()->finish()->onPause()....

或者它完成活动:意味着它直接调用

onDestroy()

实际上,我想完成我的活动,当它完全不可见

编辑:

看到这个场景,我启动了一个活动 B,其布局高度和 宽度小于活动 A,因此活动 A 部分可见 当我按下主页按钮时,活动 A 变得完全 无形的。此时我想关闭活动A,使其不 调用 onRestart()。

提前致谢。

【问题讨论】:

  • 那么为什么不在 onPause 中添加代码呢?
  • 系统将调用 onDestroy() 方法,Activity 照常结束...
  • @PankajKumar 如果 Activity 上有一个对话框怎么办?如果在这种情况下完成 Activity 怎么办?
  • @PankajKumar 正如我已经提到的,我想在它完全不可见时完成我的活动,因为当活动部分可见时可以调用 onPause。
  • @GopalRao 我认为当您从该活动中显示 Dialog 时不会调用 onPause 。检查一下。

标签: android android-activity activity-lifecycle


【解决方案1】:

它完成了活动并调用了onDestroy()。如果您想在活动不可见时完成活动,则应在 onStop() 中调用 finish()

【讨论】:

【解决方案2】:

根据您的方案,在 MainActivity 中维护一个标志,指示其他 Activity 是否已启动?并确保自己完成 MainActivity 或不基于该标志...

这可能对你有帮助...

public class MyActivity extends Activity {
    private boolean isSecondActivityLaunched;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        isSecondActivityLaunched = false;
    }

    public void onClick(View view) {
        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
        isSecondActivityLaunched = true;
    }

    @Override
    protected void onStop() {
        super.onStop();
        if(!isSecondActivityLaunched) {
            finish();
        }
    }
}

【讨论】:

    【解决方案3】:

    在您的情况下,最好的方法是调用 finish() ;

    谢谢

    【讨论】:

    • 这可能会奏效。但我不想关闭我的整个应用程序。
    • 在Android中的finish()方法只关闭调用finish()方法的当前活动。如果您想关闭整个应用程序,那么还有另一种方法。 System.exit() 相同。它将关闭当前活动。如果我的回答对你有帮助,请支持。谢谢。 :)
    • 不不不!你永远不应该打电话给System.exit()。没有理由这样做。这是个坏建议。调用System.exit() 将关闭您的整个流程(包括您的所有活动、服务等),而不仅仅是此活动。 Android 会认为你的进程崩溃了。
    • @DavidWasser 在上面提到的问题中你有什么建议??
    • @Susomrof 我还不能提出任何建议,因为我不明白 OP 想要做什么。这就是为什么我在 cmets 中问我的问题。在我提出任何建议之前,我试图了解他的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多