一个应用程序包含3个活动:活动A,B和C.每个活动都有" singleTop"设置为启动模式。
所有3项活动都有默认的" Hello world!" textview和一个按钮。活动A中的按钮启动活动B,活动B中的按钮启动活动C.这是我使用的代码:
public void startActivityB(View v){
Intent i = new Intent(A.this, B.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
活动C中的按钮只是使用finish()
我知道有类似的问题,但我已经尝试过每一件事让这项工作正常,但没有任何对我有用。问题是,如果我使用Android的BACK按钮从A导航到B,从B导航到C,然后从C导航到B,最后从B导航到A,并重复此过程几次,由于某种原因,有几个每个活动的实例,除了A,正在运行。我用MAT来检查这个,每个类只有一个对象,每个类有几个对象。
我对这种情况的关注是我的应用程序使用的内存不断增加所以这将在我的应用程序中获得一个" OOM"错误。
我做错了什么或者只是遗漏了什么?
活动A
package com.test.testapp;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
public class A extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
}
public void startActivityB(View v){
Intent i = new Intent(A.this, B.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
}
活动B
package com.test.testapp;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
public class B extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
}
public void startActivityC(View v) {
Intent i = new Intent(B.this, C.class);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
}
活动C
package com.test.testapp;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
public class C extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c);
}
public void closeActivity(View v){
finish();
}
}
更新
在更改其启动模式并使用不同的intent标志启动它们时,活动仍有多个实例。出于某种原因,即使我在活动上调用了finish(),问题仍然存在。