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) {

}
}
);
發佈了59 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章