入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

实现异地登录后当前登录被顶掉的功能(类似QQ异地登录) 退出当前App

创建时间:2017-08-26 投稿人: 浏览次数:1148

项目时计时练习的东西,所以网页登录时候要求我们App也退出,防止两个程序同时跑时间,所以。。。。

实现起来很简单,首先是考虑是如何退出app,网上有很多种,我是通过将栈底的activity 设置为singleTask 然后通过intent跳转,通过onnewIntent()接收到intent 根据tag退出,这样栈里所有activity都会被干掉,但是注意里面的子线程,这些线程还是会继续跑的,所以在activity finish的时候结束掉这些线程,如何结束线程呢?哈哈,不是现在考虑的东西

 

  @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (intent != null) {
            boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
            if (isExit) {
                this.finish();
            }
        }
    }

然后就是考虑如何将消息传递给栈顶的activiy了,然后栈顶的activity收到消息后弹出提示的dialog或者popuwindow 提示用户退出,通知所有的activity可以通过广播形式来做(Android O 不允许隐式广播了。。),我是通过EventBus 搞的,在baseactivity 中记录activity是否正在运行,然后弹出一个框 就搞定了:

package com.post.posttime.BaseClass;


import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.post.posttime.Activity.MenuHomeActivity;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * Created by Administrator on 2016/12/28.
 * activity基类
 */
public abstract class BaseActivity extends AppCompatActivity {
    public static final int NOSTATE = 99;
    boolean isVisible = false;
    boolean isShow = true;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
    }

    //结束界面
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void backToMenuActivity(Integer i) {
        if (i == NOSTATE)
            if (isVisible && isShow) {
                onExit();
                isVisible = false;
            }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        isVisible = true;

    }

    @Override
    protected void onPause() {
        super.onPause();
        isVisible = false;

    }

    //弹出dialog
    protected void onExit() {
        AlertDialog dialog;
        final AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle("检测到账号在其他设备登录").setMessage("如果不是本人登录请联系培训机构").setPositiveButton("退出", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                getOut();
            }
        }).setCancelable(false);
        dialog = builder.create();
        dialog.show();
    }
//跳转到栈底的activity 然后根据tag退出程序
    protected void getOut() {
        Intent intent = new Intent(this, MenuHomeActivity.class);
        intent.putExtra(MenuHomeActivity.TAG_EXIT, true);
        startActivity(intent);
    }

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

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

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

    }

    public void loge(String logMsg) {
        Log.e("log", logMsg);

    }

    public void loge(String key, String logMsg) {
        Log.e(key, logMsg);
    }

    public void toast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    public void longToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

}
幸甚至哉,歌以咏志
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像