onResume()之后活动再次开始

时间:2013-10-04 11:29:53

标签: android android-activity onresume

我正在开发一个应用程序,当应用程序启动时,屏幕显示(启动画面),等待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();
}

}

4 个答案:

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

}