我有一些活动(说A& B),从一个活动我通过使用Handler-post Delayed方法调用另一个活动。
我的逻辑是在应用程序中以活动A开始,并在3秒后进入活动B.& 3秒后,它完美运行。
问题是我设置了三秒的时间延迟。在这三秒期间,如果我点击主页按钮,它会显示背景,并在指定的三秒钟后立即申请回到前台并显示下一个活动。
try {
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
finish();
Intent i = new Intent(Asplash.this, Example.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(i);
}
}, 3000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
handler.removeCallbacksAndMessages(null);
finish();
return super.onKeyDown(keyCode, event);
}
我正在使用这样的代码,并且在HANDLER TIME期间的后退按钮工作正常,应用程序完全正在运行。 ,但如果我按下HOME按钮,它最初会变为背景,并且在HANDLER TIME(3000)完成后,应用程序即将出现。我希望它只在我按下Home按钮后才能进入后台。
请建议我>
答案 0 :(得分:3)
您只需将其放入活动的onPause()
方法中:
@Override
public void onPause() {
handler.removeCallbacksAndMessages(null);
super.onPause();
}
因此,当您的应用程序转到后台时,它将删除处理程序上的回调。这也适用于后退按钮和主页按钮。
答案 1 :(得分:1)
你可以从onResume()方法中解析启动处理程序,如:
@Override
public void onResume() {
try {
handler.postDelayed(new Runnable() {
@Override
public void run() {
finish();
Intent i = new Intent(Asplash.this, Example.class);
i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(i);
}
}, 3000);
} catch (Exception e) {
e.printStackTrace();
}
}
并删除onPause()中的句柄,如:
@Override
public void onPause() {
handler.removeCallbacksAndMessages(null);
super.onPause();
}
这将确保启动其他活动,即使您在3秒内按回家