0

我正在开发一个应用程序,当应用程序启动时,会出现一个屏幕(启动画面),等待 3 秒并转到第二个屏幕。因此,当我在手机或模拟器上使用返回按钮时,它会进入第一个屏幕,然后等待 3 秒,然后再次启动第二个屏幕,到目前为止一切正常。

但是当我在第一个屏幕上按下返回按钮时,我进入菜单,但 Timer/Handler 事件已经启动,所以应用程序再次启动,即使我在菜单中。应用程序。由于启动第二个屏幕而启动,在返回菜单后如何避免这个问题?当用户进入手机菜单时,我不想重新启动应用程序。我试图用 onPause 和 onStop 做一些事情,但无法管理它。我需要类似的东西,如果从 splasn 屏幕返回,应用程序必须关闭,我想。

这是我的延迟代码,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();
}

}

4

4 回答 4

0

覆盖后退按钮,因此每当用户按下后退按钮时,您都可以自己停止计时器,然后关闭应用程序。

@Override
public void onBackPressed() {
   // Stop the timer
   // close the app.
}
于 2013-10-04T11:48:27.333 回答
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);
        }
    }
});

和 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();
}
于 2013-10-04T11:35:04.470 回答
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) 在我看来,对于仅显示初始屏幕,请使用屏幕大小的布局与您的视图并onCreate()使用 postDelayed 显示/隐藏它。这样,您可以通过仅处理 1 个 Activity 类来避免奇怪的导航堆栈。

编辑:

4)我在我的一些应用程序上使用它,我没有遇到你的问题。启动这个 Activity,它会显示一个启动屏幕,3 秒后它会触发下一个 Activity,仅此而已:

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); 
}

}
于 2013-10-04T11:51:56.943 回答
0

我会使用 CountDownTimer 并在 onDestroy/onStop 方法中停止它。

于 2013-10-04T11:36:48.843 回答