在自定义的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) {
}
}
复制代码
- 在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());
}
复制代码