1

私はいくつかのアクティビティ(A&Bと言う)を持っています.1つのアクティビティから、Handler-post Delayedメソッドを使用して別のアクティビティを呼び出しています。

私のロジックはアプリ内にあり、アクティビティ A から始まり、3 秒後にアクティビティ B に移動します。3 秒後、完全に機能しています。

問題は、3 秒の時間遅延を設定したことです。この 3 秒間にホーム ボタンをクリックすると、バックグラウンドになり、指定された 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

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 秒以内にホームを押しても、他のアクティビティが確実に開始されます。

于 2013-03-06T09:46:49.233 に答える