大家好,最近在做安卓的登录,退出场景,登录无非就是达到某个条件就startActivity(new Intent(LoginActivity.this, MainActivity.class)),当我进入MainActivity时,我发现退出到LoginActivity就遇到一些问题了,我一开始用的是finish()返回到登录界面,但是这种会有一个缺陷,就是不登录,再点击返回,又会返回到Main界面,所以行不通,然后想可以用startActivity(new Intent(MainActivity.this, LoginActivity.class))调换一下位置就行了,但是跳转过去,发现还是可以返回,于是就开始百度,网上看到一个这样的解决方案

 就是跳转的时候,清理所有任务,这个方案确实可行,但是我发现,我的MainActivity的onDestroy()方法里还在做一些释放资源的操作(比如清理缓存,解绑Service()还有释放其他对象),如果用这个,我发现onDestroy里的资源还没释放完,就到登录界面,再登录就会报错。

于是我看了一下别人的demo,发现有一个超级简单做法,以下是代码:

LoginActivity

public class LoginActivity extends AppCompatActivity {

	private Button btnLogin = null;

	@Override
	protected void onCreate(@Nullable Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		this.setContentView(R.layout.demo_login_activity_layout);

		this.setTitle("登陆");
		btnLogin = this.findViewById(R.id.login_btn);
		btnLogin.setOnClickListener(v -> doLogin());
		// 登陆有关的初始化工作
		initForLogin();
	}

	private void initForLogin() {
		// 进入主界面
		startActivity(new Intent(LoginActivity.this, MainActivity.class));
		// 同时关闭登陆界面
		finish();
	}

}

登录的时候,要关闭登录接口,所以登录之后,要调一下finish(),这样进入main界面,点击返回,不会返回到登录界面了。

然后下面是main代码

MainActivity

public class MainActivity extends BaseActivity {
    
    private Button quit;

    @Override
    public int initLayout() {
        return R.layout.activity_main;
    }

    @Override
    public void initView() {
        inItView();
    }

    //  1.获得底部导航,添加点击事件
    private void inItView() {
        this.setTitle("主界面");
        quit = (Button) view.findViewById(R.id.quit);
    }

    @Override
    protected void onDestroy() {
        ....
        super.onDestroy();
    }

    //设置点击事件处理事项
    private View.OnClickListener clicks = view -> {
        switch (view.getId()) {
            case R.id.quit:
                Intent intent = new Intent();
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.setClass(getActivity(), LoginActivity.class);
                startActivity(intent);
                finish();
                break;
        }
    };
}

可以看到退出登录的核心代码:

Intent intent = new Intent();
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.setClass(getActivity(), LoginActivity.class);
                startActivity(intent);
                finish();
                break;

FLAG_ACTIVITY_CLEAR_TOP的意思是跳转到登录界面之前,把除了主界面其他存在的Activity清除,跳转之后,然后再调用finsh()关闭主界面,这样就是正确返回到登录界面,并且可以触发onDestroy里的事件了。

谢谢大家

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐