大家好,最近在做安卓的登录,退出场景,登录无非就是达到某个条件就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里的事件了。
谢谢大家