1

我有一些活动(比如 A 和 B),并且从一个活动中我使用 Handler-post Delayed 方法调用另一个活动。

我的逻辑是在 App 中从 Activity A 开始,3 秒后转到 Activity 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) 完成后,应用程序就会进入前台。我希望它只有在我按下主页按钮后才在后台。

请给我建议>

4

2 回答 2

4

您只需将其放入您onPause()的活动方法中:

@Override
public void onPause() {
    handler.removeCallbacksAndMessages(null);
    super.onPause();
}

因此,当您的应用程序进入后台时,它将删除 Handler 上的回调。这也适用于后退按钮和主页按钮。

于 2013-03-06T09:31:51.323 回答
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 秒内按下 home

于 2013-03-06T09:46:49.233 回答