Android - 按下主页按钮后,Activity会从处理程序开始

时间:2013-03-06 09:26:34

标签: android handler home-button

我有一些活动(说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按钮后才能进入后台。

请建议我>

2 个答案:

答案 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秒内按回家