本文转自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) {
}
}
);