android - 由于不活动而在另一个应用程序上时如何阻止我的应用程序弹出
问题描述
我一直在尝试检测我的应用程序中的用户不活动状态,并且确实在 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
}
}
解决方案
startHandler();
从您的方法中删除onCreate()
并添加这两种方法。
@Override
protected void onPause() {
super.onPause();
stopHandler();
}
@Override
protected void onResume() {
super.onResume();
startHandler();
}
您的代码所做的是它设置了 5 分钟的延迟来执行一段代码。每次 Activity 检测到触摸或按键时,它都会重新启动该延迟。
因此,如果用户在您自己的应用程序中闲置 5 分钟,这很有效,因为它将启动 VendorHub 活动。
但是,当用户离开您的应用程序时,您从未停止该处理程序,这会导致您的 VendorHub 活动在 5 分钟后仍会启动。
只需在 中停止处理程序onPause()
并再次启动处理程序onResume()
。
此外,由于onResume()
发生在之后onCreate()
,这也意味着不需要调用startHandler()
,onCreate()
因为它会在之后立即调用onResume()
。
推荐阅读
- razor - 以下方法或属性之间的调用不明确:'Umbraco.Web.UmbracoHelper.Media(params int[])' 和 'Umbraco.Web.UmbracoHelper
- javascript - passport.js req.user 未定义
- python - Python - 高阶函数 - make_fair_dice
- javascript - JavaScript:通过单击下一步替换数组中的列表
- elixir - Phoenix/Elixir 测试视图助手
- prolog - 最通用的统一器(Prolog)
- javascript - 如何获取在 ngfor 组件出口中创建的动态组件
- vue.js - 标签
在 Vuejs 模板中 - javascript - 这个猫鼬查询for循环有什么问题?
- sql - 是否可以在 SQL 查询中使用模式匹配来减少返回的列名