当用户不活动超过 1 分钟时,我需要显示 Pincode 屏幕。
我找到了这个答案,它为我的需求提供了一个很好的解决方案,并在我的BaseActivity上实现了它。
但是现在我遇到了onUserInteraction()方法的问题,每次我按下按钮并开始一个新活动时,它都会被调用两次(并触发我的 Runnable 两次),因为当我在 1 分钟后返回上一个屏幕时,显示密码屏幕。
我已将 Runnable 更改为静态,但我失去了启动 pincode 活动的上下文。
我该怎么做才能从可运行对象启动活动或确保仅当在屏幕上点击某些内容时才触发onUserInteraction() ?
我当前的代码:
public class BaseActivity {
private static final String TAG = BaseActivity.class.getSimpleName();
static private Handler disconnectHandler = new Handler() {
public void handleMessage(Message msg) {
}
};
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
Intent intent = new Intent(BaseActivity.this, CustomPinActivity.class);
startActivity(intent);
}
};
public void resetDisconnectTimer() {
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, getResources().getInteger(R.integer.disconnect_timeout));
}
public void stopDisconnectTimer() {
disconnectHandler.removeCallbacks(disconnectCallback);
}
@Override
public void onUserInteraction() {
resetDisconnectTimer();
}
@Override
protected void onResume() {
super.onResume();
resetDisconnectTimer();
}
@Override
public void onStop() {
super.onStop();
stopDisconnectTimer();
}
}
显现:
<activity
android:name=".CustomPinActivity"
android:launchMode="singleTop"
android:label="@string/title_activity_pincode" />
<activity android:name=".base.BaseActivity"
android:launchMode="singleTop" />