我一直在尝试在我的应用程序中检测用户不活动状态,并且确实在 stackoverflow 上找到了一段代码,它做得非常好,但问题是,当我在另一个应用程序中时,让我们说 Whatsapp 一旦计时器在我的应用程序中启动,我的应用程序就会在屏幕上弹出,我不希望这样,我不希望我的应用程序每次计时器因不活动而倒计时时弹出。
普拉迪普·古普塔的原始代码
拜托,我将如何做到这一点??
这是我的代码
public abstract class BaseActivity extends AppCompatActivity {
Handler handler;
Runnable r;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
r = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(BaseActivity.this, "user is inactive from last 5 minutes",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(BaseActivity.this,
VendorHub.class);
startActivity(intent);
finish();
}
};
startHandler();
}
@Override
public void onUserInteraction() {
// TODO Auto-generated method stub
super.onUserInteraction();
stopHandler();//stop first and then start
startHandler();
}
public void stopHandler() {
handler.removeCallbacks(r);
}
public void startHandler() {
handler.postDelayed(r, 1*60*1000); //for 5 minutes
}
}
从onCreate()
方法中删除startHandler();
并添加这两个方法。
@Override
protected void onPause() {
super.onPause();
stopHandler();
}
@Override
protected void onResume() {
super.onResume();
startHandler();
}
您的代码的作用是设置执行一段代码的 5 分钟延迟。每次活动检测到触摸或按键时,它都会重新启动该延迟。
因此,如果用户在您自己的应用程序中闲置 5 分钟,这将非常有效,因为它将启动 VendorHub 活动。
但是,当用户离开您的应用程序时,您从未停止该处理程序,这会导致您的 VendorHub 活动在 5 分钟后仍会启动。
只需在onPause()
中停止处理程序,然后在onResume()
中再次启动处理程序。
此外,由于onResume()
发生在onCreate()
之后,这也意味着没有必要在onCreate()
中调用startHandler()
,因为它将在onResume()
之后立即调用。