假设我们以某种方式引用了不在活动堆栈顶部的活动。我们可以在此活动上致电finish()
,在这种情况下究竟会发生什么?
此外,持有对非顶级活动的引用是合理的理由?将参考保存在某些静态字段中是一种访问非顶级活动的方法,但这是违反最佳做法的。
答案 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中的值。