我正在开发一个应用程序,当应用程序启动时,屏幕显示(启动画面),等待3秒并转到第二个屏幕。因此,当我在手机或模拟器上使用返回按钮时,它会进入第一个屏幕然后等待3秒,然后再次启动第二个屏幕,到目前为止它还可以。
但是当我在第一个屏幕时按下返回按钮,我进入菜单,但是Timer / Handler事件已经开始,所以app再次启动,即使我在菜单中。应用。因为启动第二个屏幕而启动,在返回菜单后如何避免此问题?当用户进入手机菜单时,我不想重新启动应用程序。我尝试用onPause和onStop做一些事情,但无法管理它。我需要类似的东西,如果从splasn屏幕返回,app必须关闭,我想。
这是我的延迟代码,PreAcilis是第一个出现的屏幕,Acilis是第二个屏幕。
@Override
protected void onResume() {
final Handler handle = new Handler();
Runnable delay = new Runnable() {
public void run() {
Intent intent_basla = new Intent(PreAcilis.this, Acilis.class);
startActivity(intent_basla);
}
};
handle.postDelayed(delay,3000);
super.onResume();
}
@Override
protected void onStop() {
super.onStop();
}
}
答案 0 :(得分:0)
正如我所理解的那样,我认为你需要这样的东西
private Thread timer=new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try{
Thread.sleep(3000);
}
catch(Exception e){
Log.e("Timer","Error");
}
finally{
startActivity(intent);
}
}
});
on onCreate方法使用此
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
intent=new Intent(this,MainActivity.class);
timer.start();
}
答案 1 :(得分:0)
我会使用CountDownTimer并在onDestroy / onStop方法中将其停止。
答案 2 :(得分:0)
覆盖后退按钮,以便每当用户按下后退按钮时,您可以自行停止计时器,然后关闭应用程序。
@Override
public void onBackPressed() {
// Stop the timer
// close the app.
}
答案 3 :(得分:0)
1)如果你只想破坏处理程序(处理程序必须是类全局的):
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Intent intent_basla = new Intent(PreAcilis.this, Acilis.class);
startActivity(intent_basla);
//delete callbacks
}
return super.onKeyDown(keyCode, event);
}
2)但是,如果您只将活动用作“启动画面”:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Intent intent_basla = new Intent(PreAcilis.this, Acilis.class);
startActivity(intent_basla);
finish();
}
return super.onKeyDown(keyCode, event);
}
3)在我看来,只显示一个启动画面,使用带有视图的屏幕大小布局,并使用postDelayed在onCreate()
上显示/隐藏它。这样,只需处理1个Activity类就可以避免奇怪的导航堆栈。
编辑:
4)我在我的一些应用程序上使用此功能,但我没有遇到您的问题。启动此活动时,它会显示一个启动画面,3秒后它将触发下一个活动,其他任何内容:
public class PreAcilis extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.pre_acilis);
super.onCreate(savedInstanceState);
new Handler().postDelayed(new Runnable(){
public void run()
{
Intent i = new Intent(getApplicationContext(),Acilis.class);
startActivity(i);
finish();
}
}, 3000);
}
}