当应用程序处于后台时运行注销方法

时间:2014-09-13 03:56:50

标签: android logout

我有一个Android应用程序,需要用户登录凭据才能访问某些数据。我想要做的是,当用户决定退出整个APP而不是Activity时,如果不活动时间超过20秒,它将调用注销方法。因此,我需要一个能够检查应用程序是否在后台的运行代码,这个应用程序应该完成以下代码:

IdleLogout方法:

   public void IdleLogout(){
        Log.i("RootActivity:IdleLogout()","******APP LOGGEDOUT******");
        SharedPreferences pref = getSharedPreferences(getString(R.string.pref_current_user), MODE_PRIVATE);             
        SharedPreferences.Editor editor = pref.edit();
        editor.clear();     // CLEAR ALL FILEDS
        editor.commit();    // COMMIT CHANGES 
        setloginButton();   // Change logout button to login
        RootActivity.alertDialog(RootActivity.this,getCustomIntent(PropertyActivity.class)).create().show();
        //startActivity(getCustomIntent(PropertyActivity.class)); //Return page to PROPERTYACTIVITY.    
    }

将获取当前活动时间

@Override
    public void onStop(){
        super.onStop();
        //get the current time on exit
        curDate = new Date();
        Log.i("RootActivity:onStop()","******curDate=******"+curDate);
    }

用户恢复应用时会占用活动时间

  @Override
    protected void onResume() {
        super.onResume();
        setloginButton();
        EnquiryActivity.PROPERTY = 0;
        //EDITED FOR SESSION LOGOUT
        //Get the Resume Time
        resumeDate = new Date();
        Log.i("RootActivity:onResume()","******resumeDate=******"+resumeDate);
        long diff = resumeDate.getTime() - curDate.getTime();
        long secInt = diff / 1000 % 60; //conversion of milliseconds into human readable form
        Log.i("RootActivity:onResume()","******sectInt=******"+secInt);
        if (secInt > Inactivity_Timeout){// SET EXIT SCREEN INTERVAL LOGOUT
            IdleLogout();
        }   
    }

1 个答案:

答案 0 :(得分:1)

您需要的是实施在后台运行且您的应用能够与之通信的服务。为此,您应该在 Application.onCreate(...)方法中启动该服务。然后,您应该创建一个基本活动(您的活动将继承),并实现onPause和onResume方法以向服务触发Intent,表明它们已进入onPause / onResume。

onPause(...)内触发的意图应指示服务开始倒计时(20秒左右)。

onResume(...)中触发的意图应指示取消倒计时的服务。

当您的上一个活动进入后台时, onPause()方法将被触发,而不会触发 onResume (取消倒计时),从而导致会话被清除如果时间过去了。

如果调用 onStop ,您将无法在Activity中显示对话框(因为它已经被销毁),所以我鼓励您使用Theme.Dialog的活动(或者它的一些味道)。

您可以使用 LocalBroadcastManager 与您的服务进行通信,并且不要忘记在 Service.onCreate(...)中以编程方式设置BroadcastReceiver。

了解代码并不总是最佳答案。

希望它能帮助您更深入地了解Android平台。

问候。