Android退出登录总结

目标:完成Android版APP应用的退出登录

思路:将多个开启的Acitivity存放在List中,打开一个addList,关闭一个removeList,创建公用APPCompatActivity基类(在基类中完成活动add和remove,以及广播接收器的注册和取消),在点击“退出登录”按钮时,关闭所有开启的Activity,最后再启动LoginActivity.

下面是代码:

1,活动列表控制类

public class ActivityCollector {
    private ActivityCollector() {}

    private static List actList = new ArrayList<>();

    public static void addActivity(Activity act) {
        actList.add(act);
    }

    public static void removeActivity(Activity act) {
        actList.remove(act);
    }

    public static void finishAll() {
        for (Activity act : actList) {
            if (!act.isFinishing()) {
                act.finish();
            }
        }
    }
}

2,AppCompatActivity的公共基类

public class BaseCompatActivity extends AppCompatActivity {
    protected LoginOutBroadcastReceiver locallReceiver;

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

        // 创建活动时,将其加入管理器中
        ActivityCollector.addActivity(this);
    }

    @Override
    protected void onResume() {
        super.onResume();

        // 注册广播接收器
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.gesoft.admin.loginout");
        locallReceiver = new LoginOutBroadcastReceiver();
        registerReceiver(locallReceiver, intentFilter);
    }

    @Override
    protected void onPause() {
        super.onPause();

        // 取消注册广播接收器
        unregisterReceiver(locallReceiver);
    }

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

        // 销毁活动时,将其从管理器中移除
        ActivityCollector.removeActivity(this);
    }
}

3,退出接收器的实现

public class LoginOutBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ActivityCollector.finishAll();  // 销毁所有活动
        Intent intent1 = new Intent(context, MainActivity.class);
        context.startActivity(intent1);
    }
}

4,退出按钮

    /**
     * 退出登录
     */
    private void loginOut() {
        Intent intent = new Intent("com.gesoft.admin.loginout");
        sendBroadcast(intent);
    }

 

你可能感兴趣的:(Android)