Android 后台运行程序要求重新登录

本文转自http://blog.csdn.net/goodlixueyong/article/details/50543627
注:对一些安全性要求较高的app,在用户后台运行一段时间后重新打开都是需要进行一次身份验证

原理

  在Application类中,提供了一个应用生命周期回调的注册方法,用来对应用的生命周期进行集中管理,这个接口叫registerActivityLifecycleCallbacks,可以通过它注册自己的ActivityLifeCycleCallback,每一个Activity的生命周期都会回调到这里的对应方法

代码实现

activity切换时的周期


first------->onPause()
Another------->onCreate()
Another------->onStart()
Another------->onResume()
first------->onStop()


public class MyApplication extends Application {
//判断是否在前后台
private int count = 0;
//第一次不对程序进行处理里
private boolean isFirst = true;
private boolean isBack = false;
private long time = -2;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
    @Override
    public void onActivityStarted(final Activity activity) {
    if (isFirst) {
     isFirst = false;
    } else {
    if (count == 0) {
    Date date = new Date();
    //回到前台的时间
    long returntime = date.getTime();
    //程序在后台运行的时间
    long sub = returntime - time;
    Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到前台  lifecycle");
    //时间小于300秒或者启动的activity为首页则不执行操作
    if (sub < 300000 || activity.getClass().getName().equals("com.test.LoginActivity")) {} 
    else {
        new AlertDialog.Builder(activity)
       .setTitle("提示消息")
       .setMessage("请重新登录")
       .setPositiveButton("确定", new DialogInterface.OnClickListener() {
           @Override
           public void onClick(DialogInterface dialog, int which) {
               String callbackActivity = activity.getClass().getName();
               //跳转到登录界面
               Intent i = new Intent(activity, LoginActivity.class);
               i.putExtra("target", callbackActivity);
               //将传入当前activity的数据保存,以便在跳转回来时不报错
               Bundle params = activity.getIntent().getExtras();
               if (params != null) {
                   i.putExtras(params);
               }
               activity.startActivity(i);
               dialog.dismiss();
           }
       })
       .setOnKeyListener(new DialogInterface.OnKeyListener() {
           @Override
           public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            //禁用返回键,要求必须重新登录
               if(keyCode==KeyEvent.KEYCODE_BACK){
                   return true;
               }else {
                   return false;
               }

           }
       }).show();
        }
    }
}
count++;
}

@Override
public void onActivityResumed(Activity activity) {

}

@Override
public void onActivityPaused(Activity activity) {

}

@Override
public void onActivityStopped(Activity activity) {
    count--;
    if (count == 0) {
    Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到后台  lifecycle");
    Date date = new Date();
    //保存上一次在后台的时间
    time = date.getTime();
    }
}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override
public void onActivityDestroyed(Activity activity) {

}
}
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值