按下“主页”按钮后,我的活动切换到ANDROID

按下“主页”按钮后,我的活动切换到ANDROID,android,Android,我有我的第一个活动,在3秒钟后切换到第二个,效果很好。问题是,如果我在这3秒钟内按下Home按钮,应用程序将在第二个活动中重新打开。有没有简单的方法来解决这个问题? 提前谢谢 public class StartActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCre

我有我的第一个活动,在3秒钟后切换到第二个,效果很好。问题是,如果我在这3秒钟内按下Home按钮,应用程序将在第二个活动中重新打开。有没有简单的方法来解决这个问题? 提前谢谢

    public class StartActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_start);

            switchActivities();
        }

        @Override
        public void onBackPressed(){

        }


        public void switchActivities() {
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
                    startActivity(intent);
                    finish();
                }

            }, 3000);
        }
}
编辑:


也许我不清楚,我不希望应用程序在按下home按钮后重新打开。我该怎么做?

这是因为您没有清除延迟的回拨。您可以通过以下方式进行修复:

private Handler handler = new Handler();

public void switchActivities() {
     handler.postDelayed(new Runnable() {

          @Override
          public void run() {
               Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
               startActivity(intent);
               finish();
          }

     }, 3000);
}

public void onStop() {
    super.onStop();
    handler.removeCallbacksAndMessages(null);        
}

这是因为您没有清除延迟的回调。您可以通过以下方式进行修复:

private Handler handler = new Handler();

public void switchActivities() {
     handler.postDelayed(new Runnable() {

          @Override
          public void run() {
               Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
               startActivity(intent);
               finish();
          }

     }, 3000);
}

public void onStop() {
    super.onStop();
    handler.removeCallbacksAndMessages(null);        
}

当您在第二个活动打开之前离开第一个活动时,您只需取消处理程序

public class StartActivity extends AppCompatActivity {

Runnable nextActivityRunnable;
Handler handler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        switchActivities();
    }

    @Override
    public void onBackPressed(){

    }


    public void switchActivities() {

      nextActivityRunnable = new Runnable() {
           @Override
           public void run() {
            Intent intent = new Intent(getApplicationContext(), 
            SecondActivity.class);

            startActivity(intent);
            finish();
        }
      };

      handler = new Handler();
      handler.postDelayed(nextActivityRunnable, 3000);
    }

@Override
protected void onPause() {
    super.onPause();

    handler.removeCallbacks(nextActivityRunnable);
}

}

当您在第二个活动打开之前离开第一个活动时,您只需取消处理程序

public class StartActivity extends AppCompatActivity {

Runnable nextActivityRunnable;
Handler handler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        switchActivities();
    }

    @Override
    public void onBackPressed(){

    }


    public void switchActivities() {

      nextActivityRunnable = new Runnable() {
           @Override
           public void run() {
            Intent intent = new Intent(getApplicationContext(), 
            SecondActivity.class);

            startActivity(intent);
            finish();
        }
      };

      handler = new Handler();
      handler.postDelayed(nextActivityRunnable, 3000);
    }

@Override
protected void onPause() {
    super.onPause();

    handler.removeCallbacks(nextActivityRunnable);
}

}

当您在switchActivities内调用finish()时,这是预期的,它将终止当前打开的活动(第一个)。如果要在第二个活动中重新打开应用程序,请不要调用finish()。@Ramal,这是预期行为。当您从最近打开应用程序时,它将以当前状态打开。如果您从“最近”中清除并再次打开,则它将按您所希望的那样工作,因为您正在switchActivities中调用finish(),这将终止当前打开的活动(第一个)。如果要在第二个活动中重新打开应用程序,请不要调用finish()。@Ramal,这是预期行为。当您从最近打开应用程序时,它将以当前状态打开。如果您从“最近”中清除并再次打开,则它将按照您的需要工作