在非顶级活动上调用finish()时会发生什么

时间:2014-05-29 22:01:24

标签: android android-activity

假设我们以某种方式引用了不在活动堆栈顶部的活动。我们可以在此活动上致电finish(),在这种情况下究竟会发生什么?

此外,持有对非顶级活动的引用是合理的理由?将参考保存在某些静态字段中是一种访问非顶级活动的方法,但这是违反最佳做法的。

2 个答案:

答案 0 :(得分:0)

是的,我们可以就此活动致电finish()。前场和背景活动之间没有区别。

Intent intent = new Intent(this, ActivityB.class);
startActivity(intent); // Now this Activity goes to background

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getApplicationContext(), "Finish", Toast.LENGTH_SHORT).show();
        finish(); // Finished as normal.
    }
}, 2000);

避免将活动的引用保存到静态字段。它会导致内存泄漏。

答案 1 :(得分:0)

  

对此活动的完成(),以及在这样的活动中究竟会发生什么   情况?

我相信你可以。如果非顶级活动在屏幕上仍然可见,您将最终得到黑屏。

  

此外,持有对a的引用的正当理由是什么   非顶级活动?

如果您必须保留对当前在后台的活动的引用,我认为您必须考虑您的设计是否正确。如果GC无法收集旧的活动,这将导致大量内存泄漏。

  

在某些静态字段中保存引用是一种可以访问的方法   非顶级活动

你应该使用像Constants.java这样的类来放入非top活动中的所有静态字段,并重用Constants.java中的值。