一个应用中有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

解决方案 »

  1.   

    Intent i = new Intent(Gs2.this, AlbumDemoActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
      

  2.   

     mainfestive要设置成这个才有用 <activity
                android:name=".Gs"
                android:launchMode="singleTop" >
            </activity>
      

  3.   

    你可以参考一下这个:
    http://goo.gl/9WYbL
      

  4.   

    这个方法行不通,还是没有除去ActivityB
      

  5.   


    建议使用栈统一管理,这个不会漏掉,finish也方便
      

  6.   

     System.exit(0)  这个不行么
      

  7.   

    个人感觉B启动C没有必要用startActivityForResult();如果登录了将用户名卸载sharedpreference中启动C的再读取出来