按下“主页”按钮后,我的活动切换到ANDROID
我有我的第一个活动,在3秒钟后切换到第二个,效果很好。问题是,如果我在这3秒钟内按下Home按钮,应用程序将在第二个活动中重新打开。有没有简单的方法来解决这个问题? 提前谢谢按下“主页”按钮后,我的活动切换到ANDROID,android,Android,我有我的第一个活动,在3秒钟后切换到第二个,效果很好。问题是,如果我在这3秒钟内按下Home按钮,应用程序将在第二个活动中重新打开。有没有简单的方法来解决这个问题? 提前谢谢 public class StartActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCre
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,这是预期行为。当您从最近打开应用程序时,它将以当前状态打开。如果您从“最近”中清除并再次打开,则它将按照您的需要工作