一个应用中有3个activity,A,B,C.A是登录界面,B是菜单界面,C是设置界面,其中有个按钮“注销登录”。点击该按钮就setResult to B, finish C , start A.但是测试到start A 时并没有关闭B,C确定是关闭了。有两种方案:方案一:我现在用的,但没有成功。C启动A之前,向B发消息让B结束自己,接着结束自己,然后启动A。
B接到C结束自己的信息后就结束自己。由于B是菜单界面,不能启动C时结束自己,于是就在Activity栈里,没法消掉。方案二: C启动A之前直接结束B。
B public static B instance =null;
onCreat(){
instance=this;}
C B.instance.finish();
但用到了静态变量感觉不太好,希望用第一种方法解决。附上第一种方法源码:
Activity A: LoginActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
login=(Button) findViewById(R.id.login);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(LoginActivity.this,MenuActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}
}
} Activity B: MenuActivity.java @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
setting=(Button) findViewById(R.id.login);
setting.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent settingintent=new Intent(MenuActivity.this, SettingActivity.class);
startActivityForResult(settingintent,1);
}
}
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==1){
switch(resultCode){
case RESULT_CANCLED:
break;
case RESULT_OK:
MenuActivity.this.finish();
Log.i(TAG, "I'm killed"+System.currentTimeMillis());
break;
}
}
}
Activity C: Setting.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
logout=(Button) findViewById(R.id.login);
logout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent=new Intent(SettingActivity.this,LoginActivity.class);
startActivity(mIntent);
SettingActivity.this.setResult(RESULT_OK);
SettingActivity.this.finish(); }
}
}AndroidJava界面测试Activity
B接到C结束自己的信息后就结束自己。由于B是菜单界面,不能启动C时结束自己,于是就在Activity栈里,没法消掉。方案二: C启动A之前直接结束B。
B public static B instance =null;
onCreat(){
instance=this;}
C B.instance.finish();
但用到了静态变量感觉不太好,希望用第一种方法解决。附上第一种方法源码:
Activity A: LoginActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
login=(Button) findViewById(R.id.login);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(LoginActivity.this,MenuActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}
}
} Activity B: MenuActivity.java @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
setting=(Button) findViewById(R.id.login);
setting.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent settingintent=new Intent(MenuActivity.this, SettingActivity.class);
startActivityForResult(settingintent,1);
}
}
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==1){
switch(resultCode){
case RESULT_CANCLED:
break;
case RESULT_OK:
MenuActivity.this.finish();
Log.i(TAG, "I'm killed"+System.currentTimeMillis());
break;
}
}
}
Activity C: Setting.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
logout=(Button) findViewById(R.id.login);
logout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent=new Intent(SettingActivity.this,LoginActivity.class);
startActivity(mIntent);
SettingActivity.this.setResult(RESULT_OK);
SettingActivity.this.finish(); }
}
}AndroidJava界面测试Activity
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
android:name=".Gs"
android:launchMode="singleTop" >
</activity>
http://goo.gl/9WYbL
建议使用栈统一管理,这个不会漏掉,finish也方便