安卓版手机app登录后在后台运行固定时间和被杀死后固定时间重启后重新登录...

在自定义的Application中的onCreate()中注册自定义的ActivityLifecycleListener, ActivityLifecycleListener 的作用:Application通过此接口提供了一套回调方法,用于让开发者可以对Activity的生命周期事件进行集中处理

1.在自定义的Application中的onCreate()中注册自定义的ActivityLifecycleListener

    @Override
    public void onCreate() {
        super.onCreate();
     
        registerActivityLifecycleCallbacks(new ActivityLifecycleListener(this));

       }
复制代码

2.继承ActivityLifecycleCallbacks,主要是在onActivityStopped中用sp记录一个app退到后台的时间

/**
 * 监听所有Activity的生命周期
 * Created by ligoudan on 2017/1/21.
 */


public class ActivityLifecycleListener implements Application.ActivityLifecycleCallbacks {

  private int mRefCount = 0;//来记录 Activity 活动的个数, Activity 调用 onStart 就 +1, onStop 就 -1.  
  private long mCurrentTime;
  TimeCountUtil mTimeCountUtil = new TimeCountUtil(2 * 60 * 1000, 1000);
  private long mLimiting = 2 * 60 * 1000;//退出到后台需要重新登录的时间
  private List<Activity> mActivityList = new ArrayList<>();
  public static final String TAG = "ActivityLifecycle";
  private LocationService locationService;
  private Context mContext;

  public ActivityLifecycleListener(Context context) {
    this.mContext = context;




  }

  @Override
  public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    //记录除了登录的所有创建的activity,后面跳转到登录界面需要finish掉集合里面的所有activity
    if (!(activity instanceof LoginActivity)) {
      mActivityList.add(activity);
    }
    long onBackTime = System.currentTimeMillis() - SPUtil.getSharedPreferences(mContext).getOnBackTime();
    if (onBackTime < 2 * 60 * 1000){
      SPUtil.getSharedPreferences(mContext).setOnBackTime(Long.MAX_VALUE);
    }else {
      return;
    }
    Log.d("存储的时间", "存储的时间为5 onActivityCreated :" + SPUtil.getSharedPreferences(mContext).getOnBackTime());
  }

  @Override
  public void onActivityStarted(final Activity activity) {

    mRefCount++;


    long onBackTime = System.currentTimeMillis() - SPUtil.getSharedPreferences(activity).getOnBackTime();

   SPUtil.getSharedPreferences(activity).getOnBackTime());


    if (onBackTime > mLimiting) {
      //若在后台的时间超过设定的限制时间,退出登录

      LoginModel model = new LoginModel();

      model.logout(MyApplication.getToken());

      model.setLogoutListener(new LoginModel.OnLogoutListener() {
        @Override
        public void onLogoutSucceed() {
          SPUtil sp = SPUtil.getSharedPreferences(activity);
          sp.setLoginState(false);


          MyApplication.setToken("");//退出将token值设置为空 


          SPUtil.getSharedPreferences(activity).setOnBackTime(Long.MAX_VALUE);

          Log.d("存储的时间", "存储的时间为3 退登后 :" + SPUtil.getSharedPreferences(activity).getOnBackTime());

          //退出登录后停止接收消息通知
          Intent intent = new Intent(activity, NotificationService.class);
          activity.stopService(intent);

          if (!(activity instanceof SplashActivity) && !(activity instanceof LoginActivity) && mRefCount == 1) {
            for (Activity a : mActivityList) {
              if (a != null) {
                a.finish();
              }
            }
            JumpIntoActivity.jumpIntoLogin(activity);
          }
        }

        @Override
        public void onLogoutFailed() {

        }
      });


      /**
       * 关闭倒计时,设置tag为false
       */
      mTimeCountUtil.setTimeTag(false);
      mTimeCountUtil.cancel();


 
    }


  }


  @Override
  public void onActivityResumed(final Activity activity) {


  }

  @Override
  public void onActivityPaused(Activity activity) {
  }

  @Override
  public void onActivityStopped(Activity activity) {

    mRefCount--;
    if (mRefCount == 0) {


      //APP退到后台后 记录时间
      SPUtil.getSharedPreferences(activity).setOnBackTime(System.currentTimeMillis());

 
   
    }

  }

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

  }

  @Override
  public void onActivityDestroyed(Activity activity) {
  }



}
复制代码
  1. 在BaseActivity中onRestart()中处理app退到后台或被杀死的时间
@Override
   protected void onRestart() {
       super.onRestart();
       long onBackTime = System.currentTimeMillis() - SPUtil.getSharedPreferences(this).getOnBackTime();
       if (onBackTime < 2 * 60 * 1000){
           SPUtil.getSharedPreferences(this).setOnBackTime(Long.MAX_VALUE);
       }else {
           return;
       }
       Log.d("存储的时间", "存储的时间为4 onRestart :" + SPUtil.getSharedPreferences(this).getOnBackTime());



   }

复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值